【问题标题】:Why is meta-information not rendered in this MarionetteJS composite view?为什么这个 MarionetteJS 复合视图中没有呈现元信息?
【发布时间】:2013-04-23 00:56:28
【问题描述】:

我在使用带有 MarionetteJS 的 CompositeView 加载元信息时遇到了这种意外行为。来自服务器端的 JSON 如下所示:

{ “元”:{ “总数”:2 }, “电影”: [ { “类别”:“动作”, "description": "另一个故事……", “身份证”:1, “星星”:“4.0”, "title": "我的测试电影" }, { “类别”:“动作”, "description": "故事发生了......", “身份证”:2, “星星”:空, “标题”:“我的第二部电影” } ] }

我使用 Backbone 集合来设置元信息,例如:

MA.Collections.Movies = Backbone.Collection.extend({ url: '/api/movies.json', 解析:函数(数据){ this.meta = new MA.Models.MetaMovie(data.meta); 返回 data.movi​​es; } }); MA.addInitializer(函数() { MA.Collections.Movies.model = MA.Models.Movie; })

但是当我尝试从 CompositeView 访问这个元变量时,集合已正确初始化,而元信息似乎丢失了。任何想法如何将这些元信息提供给 CompositeView 的模型?

PS 控制台输出如下:

【问题讨论】:

标签: backbone.js marionette


【解决方案1】:

从 fetch 设置一个回调并使用它来将 meta.total 的值直接设置到您的 metaMovie 模型实例上

movies.js:

MA.addInitializer(function(){
  var self = this;
  var metaMovie = new MA.Models.MetaMovie({total: 1});

  MA.collections.movies = new MA.Collections.Movies();
  MA.composites.movies = new MA.Views.Composites.Movies({
    itemView: MA.Views.Items.Movie,
    model: metaMovie,
    collection: MA.collections.movies
  });
  var p = MA.collections.movies.fetch();

  // see http://api.jquery.com/jQuery.ajax/ for details
  p.done(function(data) {
    self.metaMovie.set({total: data.total});
  });
});

【讨论】:

  • 另外,我需要触发一个渲染(): MA.composites.movi​​es.render();然后这行得通!谢谢!
猜你喜欢
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2022-01-16
  • 1970-01-01
  • 2020-11-20
相关资源
最近更新 更多