木偶和骨干。在View中渲染javascript滑块

时间:2014-03-09 11:26:26

标签: backbone.js render marionette

这是代码:

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滑块不会渲染?

1 个答案:

答案 0 :(得分:2)

slide()这样的DOM事件/操作对视图对象的初始化没有任何影响,因为还没有这样的DOM元素可用。

相反,您需要监听视图的dom:refresh来操纵其DOM元素。

所以,只需将代码放在onDomRefresh的ItemView

onDomRefresh: function(){ $('#sliderContainer').slide() };

以上是直接修复。但还有两件事需要改进:

  1. 尽可能不要在此视图之外调用其他div。在这种情况下,如果#sliderContainer属于另一个视图,请发送一个事件以允许它自行滑动。这不是CategoryView的工作。如果它位于当前视图中,请使用this.$el.find(".some-div")或更好的ui对象引用它。

  2. 您的collectionView的appendHtml是不必要的。木偶也采取了这种常见的情况。