簡體   English   中英

從ember.js中的控制器加載數據

[英]Load data from controller in ember.js

我想實現一個向我顯示最新帖子的系統。 為此,我不想使用來自用戶的index操作,因為這已經用於另一個post函數,但是是“最新”操作。 通過{{ render "postNewest" }}調用{{ render "postNewest" }}其顯示在索引路由上。 由於抽象的原因,我希望將數據加載到PostNewestController或PostNewestView中,而不是路由中。 為了達到這個目的,我嘗試了兩種方法,但到目前為止都沒有奏效:

  • 創建一個自定義適配器並添加findNewest()方法:當嘗試在控制器的init方法中調用時,找不到findNewest()方法。

  • 將請求直接寫入init方法,然后使用store.loadMany(payload)更新:數據成功請求。 但是,我不知道如何從模板訪問數據並設置控制器的內容。

有什么辦法嗎?

編輯:

這是可以更好地理解問題的源代碼:

PostModel.js

App.Post.reopenClass({
    stream: function(items) {
        var result = Ember.ArrayProxy.create({ content: [] });
        var items = [];
        $.getJSON("/api/v1/post/stream?auth_token=" + App.Auth.get("authToken"), function(payload) {
            result.set('content', payload.posts);
        });
        return result;
    }
});

PostStreamController.js

App.PostStreamController = Ember.ArrayController.extend({
    init: function() {
        this.set("content", App.Post.stream());
    },
});

index.hbs

{{# if App.Auth.signedIn}}
    {{ render "dashboard" }}
{{else}}
    {{ render "GuestHeader" }}
{{/if}}

{{ render "postStream" }}

postStream.hbs

{{#each post in model}}
    <li>{{#linkTo 'post.show' post data-toggle="tooltip"}}{{post.name}}{{/linkTo}}</li>
{{else}}
    Nothing's there!
{{/each}}

PostShowRoute.js

App.PostShowRoute = Ember.Route.extend({
    model: function(params) {
        return App.Post.find(params.post_id);
    },
    setupController: function(controller, model) {
        controller.set('content', model);
    },
});

我也有這個問題。 只需在控制器中添加init ,然后定義要到達的模型。

在您的控制器中

App.PostRecentController = Ember.ArrayController.extend({
  init: function() {
    return this.set('content', App.Post.find({
      recent: true
    }));
  }
});

在您的模板中

{{#each post in content}}
    {{post.body}}
{{/each}}

我建議您檢查EMBER EXTENSION,它將為您提供一個很好的命名思路,並查看是否丟失了所有內容。

我解決了這個問題。 Post模型與另一個模型有一個belongsTo關系。 這種關系不是由Ember加載的,因此在stream()方法中,我必須手動加載此關系。 然后一切都會按預期進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM