2013-04-21 50 views
1

我收到了一個帶有MarionetteJS的CompositeView加載元信息的意外行爲。從服務器端的JSON的樣子:爲什麼在此MarionetteJS複合視圖中未顯示元信息?

 
{ 
    "meta": { 
     "total": 2 
    }, 
    "movies": [ 
     { 
      "category": "Action", 
      "description": "Another story goes ....", 
      "id": 1, 
      "stars": "4.0", 
      "title": "My test movie" 
     }, 
     { 
      "category": "Action", 
      "description": "the story goes....", 
      "id": 2, 
      "stars": null, 
      "title": "my second movie" 
     } 
    ] 
} 

我用一個骨幹集合設置像元信息:

 
MA.Collections.Movies = Backbone.Collection.extend({ 
    url: '/api/movies.json', 
    parse: function(data) { 
    this.meta = new MA.Models.MetaMovie(data.meta); 
    return data.movies; 
    } 
}); 

MA.addInitializer(function() { 
    MA.Collections.Movies.model = MA.Models.Movie; 
}) 

但是,當我嘗試從CompositeView中訪問此元變量,收集被正確初始化,而元信息似乎丟失了。任何想法如何將這個元信息提供給CompositeView的模型?

PS控制檯輸出看起來像:

composite view output

+2

你只在你的分析函數中返回data.movi​​es。 – steveax 2013-04-21 22:42:43

+0

正確。我正在嘗試在這裏建議的方法:http://stackoverflow.com/questions/5711245/backbone-js-getting-extra-data-along-with-the-request – poseid 2013-04-22 06:10:53

+0

如果您發佈的路由器/控制器的代碼創建您的收藏和查看實例我將向您展示完成您正在嘗試執行的操作的明確方法。 – 2013-04-22 15:50:50

回答

1

安裝程序獲取並使用它來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}); 
    }); 
}); 
+0

另外,我需要通過以下方式觸發render():MA.composites.movi​​es.render();然後這工作!謝謝! – poseid 2013-04-22 17:24:16