这是代码:
NewEntry_CategoryView = Backbone.Marionette.ItemView.extend({
template: "#NewEntry_Category-template",
tagName: "p",
initialize: function () {
$("#sliderContainer").slider();
}
});
NewEntry_CategoriesView = Backbone.Marionette.CompositeView.extend({
template: "#NewEntry_Categories-template",
tagName: "div",
itemView: NewEntry_CategoryView,
itemViewContainer: '#categoryContainer',
appendHtml: function (collectionView, itemView) {
collectionView.$("#categoryContainer").append(itemView.el);
}
});
为什么在显示NewEntry_CategoriesView时jquery ui滑块不会渲染?
答案 0 :(得分:2)
像slide()
这样的DOM事件/操作对视图对象的初始化没有任何影响,因为还没有这样的DOM元素可用。
相反,您需要监听视图的dom:refresh
来操纵其DOM元素。
所以,只需将代码放在onDomRefresh
的ItemView
onDomRefresh: function(){ $('#sliderContainer').slide() };
以上是直接修复。但还有两件事需要改进:
尽可能不要在此视图之外调用其他div。在这种情况下,如果#sliderContainer
属于另一个视图,请发送一个事件以允许它自行滑动。这不是CategoryView的工作。如果它位于当前视图中,请使用this.$el.find(".some-div")
或更好的ui
对象引用它。
您的collectionView的appendHtml是不必要的。木偶也采取了这种常见的情况。