【问题标题】:Marionette ItemView with data from two resources带有来自两个资源的数据的木偶 ItemView
【发布时间】:2016-10-26 20:51:32
【问题描述】:

目前我正在摆弄 Marionette 和 Backbone(因为我必须这样做)。我有一个实体列表:CompositeView 和 ItemViews,每个 ItemView 都有一个模型,其中包含 firstname 和 lastname 之类的数据。

在每个ItemView 中都有一个链接,它将通过 AJAX(另一个端点!)捕获 ItemView 的新数据,并且应该使用附加数据列表更新视图,例如:[{"id": 1, "foo": "this is soo bar"}, {"id": 2, "foo": "a little bit of baz"}]。该数据应该随后呈现到视图中(并且可以通过单击再次删除)。

去这里最好的方式是什么?在ItemView 中添加第二个模型或将新数据添加到现有视图?还是完全不同的东西?我感谢每一个有用的提示!

我的解决方案(有点)

这是我最终得到的结果:单击附加数据的链接时,关联的 ItemView 实例化了我定义的 Backbone.Collection 对象。该集合包含端点的 URL。然后,我调用collection.fetch() 方法并使用Underscore 呈现该集合,如下所示(大致):

var tpl = _.template(dataTemplate);
var html = tpl({ myData: {collection.models});

node.html(html);

谢谢你们和我一起思考:)

【问题讨论】:

  • “每个 ItemView 都有一个模型,其中包含名字和姓氏等数据” - 这些数据来自哪里?端点还是其他东西?
  • 没错。该应用程序将在单击按钮时启动,将调用 AJAX 端点,然后首先呈现此 (JSON) 数据。编辑:但是那个端点是另一个端点
  • 基本上一个itemview不能有多个模型
  • 但是我可以在现有的数据中添加额外的数据,对吧?额外的数据不会被同步或什么的。所以也许我只会渲染第二次调用的数据......
  • @Hando 我猜github.com/theironcook/Backbone.ModelBinder 是个不错的选择

标签: backbone.js underscore.js marionette


【解决方案1】:

一堆不同的方法来解决,这是我喜欢的

模板助手

var View = Mn.ItemView.extend({
    templateHelpers: function () {

        // Each property will be available in the template
        return {
            extraData: 'my data',
            anotherModel: this.getOption('secondModel').toJSON(),
            someOtherData: ''
        }
    }
});

new View({model: MyModel, secondModel: SecondModel});

要从父视图中获取额外数据,请查看childViewOptions

从您的数据来看,它是一个项目数组。所以你的childView 为你的CompositeView 可能是CollectionView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2019-02-05
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多