【问题标题】:Emberjs Page Template ModelEmberjs 页面模板模型
【发布时间】:2014-04-22 16:38:44
【问题描述】:

我从服务器返回的数据包含我试图在模型中使用的页面数据。你可以在这里看到 json https://gist.github.com/bungdaddy/11152304。如果你看一下 collection.template.data,这是我在模型中需要的数据,我已经把它们放在一起了。

var PageTemplate = Ember.Object.extend();

PageTemplate.reopenClass({
    all: function(){
        return $.getJSON("http://myurl.com").then(function(response){
            var pageTemplate = [];

            var template = response.collection.template.data;

            template.forEach(function(data){
                pageTemplate.push(PageTemplate.create(data));
            });

            return pageTemplate;
        });
    }
});

export default PageTemplate;

这会返回 json,但我的问题是,我如何在 template.hbs 中定位像 collection.template.data[10].acceptableValues 这样的内部数组?我可以为这个数组构建一个模型,但我想要一个调用数据库的 PageTemplate。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    如果您正在寻找一种显示方式

    collection.template.data[10].acceptableValues
    

    在您的模板中,您需要做的就是在您的模型/控制器上设置一个类似于以下内容的计算属性:

    prop: function() {
      return this.get('collection.template.data').map(function(item) { 
                   return item;});
    }.property('collection.template.data')
    

    然后在你的车把中你可以使用

     {{#each prop}} 
     //blah
     {{each}}
    

    【讨论】:

    • 感谢Hrishi,如果我在reopenClass() 中有多个计算属性,如何将其发送到车把模板
    • @Bungdaddy 你没有“发送”它们,你只是在你的 Handlebars 模板中引用它们,就像 Hrishi 在他回答的最后一步中所做的那样。 Ember 处理绑定和引用管理。如果您有多个计算属性,您只需根据需要引用它们中的每一个。
    • 感谢@MattBaker,我想我的问题出在我的路线上。 export default Ember.Route.extend({model: function(){ return PageTemplate.all();}});
    • @Bungdaddy 啊,是的。如果您没有在路由器中覆盖setupController,它将自动将您模型的已解析Promise(Router.model 阻塞,直到Promise 解析)分配给控制器上的model 属性。除非它是 ArrayController,否则它是 content,或者是 ObjectController,那么它就是 target。因此,您可能需要访问适当的 model 属性来获取您的对象,具体取决于您拥有的控制器类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多