Tho*_*ham 8 jquery backbone.js backbone-views marionette
我正在使用一个复合视图,其中$ .dialog调用了它的$ el.
然后,合成视图将列出集合中的项目.
现在我已经尝试了多种方式来渲染集合项:从复合视图外部获取它,然后将其附加到视图中,在视图内部获取,从我的服务器脚本预加载集合等等...
一切似乎都有效,但同样的问题发生..
一旦复合视图看到这个集合,它就会再次调用它自己的初始化函数......
我完全理解渲染函数将在集合重置或添加时调用...但是初始化??? 我完全不知道为什么会这样.
showCustomFieldSelect: function(e){
log('triggered');
e.preventDefault();
var cl = new AustApp.Collections.CustomField;
var select = new AustApp.Views.AvailableCustomFieldsList({
el: "#available-custom-fields-popup",
collection: cl
});
cl.fetch();
cl.once("reset", function(){
// this bind was
// previously used for creating the view
// or calling render functions directly
// amongst numerous efforts to debug
}, this);
},
MyApp.Views.AvailableCustomFieldsList = function(){
var AvailableCustomFieldsList = Backbone.Marionette.CompositeView.extend({
template: "#available-contact-list-custom-field-list-js",
tag: "div",
itemView: AustApp.Views.AvailableCustomFieldsListItem,
emptyView: AustApp.Views.EmptyAvailableCustomFieldsListItem,
itemViewContainer: "ul",
templateHelpers: viewHelpers,
initialize: function(){
log('init called'); // called twice?????
this.render();
this.$el.dialog({
title: "Available Custom Fields",
width: '600px',
modal: true,
dialogClass: "round",
});
},
/* stuff */
});
return AvailableCustomFieldsList;
}();
Run Code Online (Sandbox Code Playgroud)
任何帮助,因为我很沮丧
sim*_*olo 18
对我来说,这是固定的,但在确认(几个小时敲打我的表头后)ItemView是之前宣布的CompositeView!
作品:
MyItemView = Marionette.ItemView.extend({ /* STUFF */ })
MyCompView = Marionette.CompositeView.extend({ itemView: MyItemView })
Run Code Online (Sandbox Code Playgroud)
不起作用(init没有任何参数调用两次):
MyCompView = Marionette.CompositeView.extend({ itemView: MyItemView })
MyItemView = Marionette.ItemView.extend({ /* STUFF */ })
Run Code Online (Sandbox Code Playgroud)
即使我们在声明两者之后获得MyCompView的实例也没关系,必须在compsite视图之前声明itemView.
所以我把问题缩小到在复合视图之后声明项目视图的时候,复合视图也包含在另一个复合视图中.
将嵌套的复合视图更改为项视图可以解决问题,但是...将嵌套的复合视图更改为集合视图会发生错误,即集合的itemView不可用
所以将嵌套视图的声明移动到集合视图的声明之上就修复了它......然后改变它,发现嵌套的复合视图在声明的顺序正确时起作用.
我认为这应该不那么具有误导性,因为复合视图的双初始化只是简单的混淆,并且应该吐出关于未定义的项目视图的错误,而不是如果可能的话,那就是^ ^ ^
谢谢
| 归档时间: |
|
| 查看次数: |
3725 次 |
| 最近记录: |