Backbone.js 木偶和脊梁。在视图中呈现javascript滑块
代码如下:Backbone.js 木偶和脊梁。在视图中呈现javascript滑块,backbone.js,render,marionette,Backbone.js,Render,Marionette,代码如下: NewEntry_CategoryView = Backbone.Marionette.ItemView.extend({ template: "#NewEntry_Category-template", tagName: "p", initialize: function () { $("#sliderContainer").slider(); } }); NewEntry_CategoriesView = Backbone.Marionette.CompositeV
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\u CategoriesView时,为什么jquery ui滑块没有呈现?DOM事件/像
slide()这样的操作不会对视图对象的初始化产生任何影响,因为还没有这样的DOM元素可用
相反,您需要监听视图的dom:refresh
,以操作其dom元素
因此,只需将代码放入ItemView中的onDomRefresh
onDomRefresh: function(){ $('#sliderContainer').slide() };
这是一个直接修复。但还有两件事需要改进:
尽可能不要调用此视图之外的其他div。在这种情况下,如果#sliderContainer
属于另一个视图,则发送一个事件以允许它自己滑动。这不是CategoryView的工作。如果它在当前视图中,请使用this.$el.find(“.some div”)
或更好的ui
对象来引用它
您的collectionView的appendHtml是不必要的。木偶也采取这种常见的情况
如果我在onShow:function(){…}方法中创建滑块,那么我将获得一个滑块,但仅用于正在显示的第一个itemviewcollectionView.$(“#categoryContainer”)
方法中的appendHtml
?在我看来,你没有充分的理由覆盖了这个方法。你能试着移除它并检查它是否有效吗?我想一个解决方案是将它放在onShow方法中谢谢你,我做了改进,现在它可以工作了。我把它放在onShow方法思想中。这辆车有什么区别?只有两个不同的事件?现在我使用:$(self.el).find(“#sliderContainer”).slider({@user3166101,onDomRefresh
比onShow
更可靠地进行DOM操作,其中元素在DOM中得到保证。