【问题标题】:Template two models in one view - Backbone/Marionette在一个视图中模板两个模型 - Backbone/Marionette
【发布时间】:2013-03-19 00:04:57
【问题描述】:

我试图在一个视图中使用两个模型,并且模板同时使用它们。我正在和木偶一起工作。这是我对视图的初始化:

main_app_layout.header.show(new APP.Views.HeaderView({
 model: oneModel,
 model2 : twoModel}
));

这是我的看法:

APP.Views.HeaderView = Backbone.Marionette.ItemView.extend({

    template : '#view_template',

    className: 'container',


    initialize: function() {
               //This correctly logs the second model
                console.log(this.options.model2);

    }

});

这是模板:

 <script id="view_template" type="text/template">
        <p>{{twoModel_label}} {{oneModel_data}}</p>
        <p>{{twoModel_label2}} {{oneModel_data2}}</p>
    </script>

它使用 oneModel 数据正确呈现所有内容,但不呈现第二个,即使它正确记录它。我使用 Mustache 作为我的模板语言。

谁能帮忙?

【问题讨论】:

    标签: javascript model-view-controller backbone.js marionette


    【解决方案1】:

    您可以覆盖视图上的serializeData 方法并让它返回两个模型的数据:

    
    APP.Views.HeaderView = Backbone.Marionette.ItemView.extend({
    
      // ...
    
      serializeData: function(){
        return {
          model1: this.model.toJSON(),
          model2: this.options.model2.toJSON()
        };
      }
    
    });
    

    那么您的模板将如下所示:

    <script id="view_template" type="text/template">
        <p>{{model1.label}} {{model1.data}}</p>
        <p>{{model2.label}} {{model2.data}}</p>
    </script>
    

    【讨论】:

    • 这太棒了——感谢您回答 Derick! (顺便说一句,我喜欢木偶!)。但是,我不断收到 model2 未定义的错误(特别是,不能调用 undefined 的方法 'toJSON' )——是否有一种特定的方法可以传递第二个模型,这与我原来的方式不同?
    • 我通过将 model2 更改为 this.options.model2 解决了这个问题!再次感谢!
    • CollectionView 有类似的方法吗?这篇文章有点离题,但它可能会有所帮助! (再次感谢!)
    • CollectionView 不呈现模板,因此没有完成数据序列化。不过,CompositeView 围绕集合呈现模板,解决方案是相同的。
    • 嗯,有道理!我想我可能不清楚我的问题(或者这可能是一个单独的问题),但是我怎样才能将“model2”之类的选项传递给 CollectionView,并在每个生成的视图中使用它?是否必须是 CompositeView 才能做到这一点,还是这是另一个过程? (再次感谢您的帮助 - 我对 Marionette 了解得越多,我就越喜欢它!)
    【解决方案2】:

    尝试创建一个包含这两个模型的复杂模型,这个新模型将其他两个作为属性,您可以像这个答案解释的那样访问每个模型的属性..

    Access Nested Backbone Model Attributes from Mustache Template

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多