作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
场景是这样的:我有一个 collectionView
在几个地方使用。我将一些选项传递到 View 中以更改某些显示方面(主要是措辞),因为行为在任何地方都完全相同。
我真的很想将此自定义扩展到 emptyView
,但我找不到这样做的方法。似乎没有提及 collectionView
在 emptyView
上,我似乎也无法访问 emptyView
来自 collectionView
, 在定义之外。
基本上,我希望能够做这样的事情:
var noItemsView = Backbone.Marionette.ItemView.extend({
tagName: "li",
className: "no-results",
template: Handlebars.compile(noResultsTemplate),
}),
leftToggleListView = Backbone.Marionette.CollectionView.extend({
tagName: "ul",
className: "left-toggle-view-list",
emptyView: noItemsView,
initialize: function() {
this.emptyView.model.set("name": "some custom name");
}
});
然后有 noItemsView
能够呈现 {{ name }}
在其模板中。
除了修改 Marionette 之外,还有什么办法可以做到这一点吗?
最佳答案
在collectionView中你可以使用buildItemView,这个函数也会在构建emptyView的时候被调用
我在 jsFiddle 中做了一个小演示 http://jsfiddle.net/rayweb_on/TN34P/
var leftToggleListView = Backbone.Marionette.CollectionView.extend({
tagName: "ul",
className: "left-toggle-view-list",
emptyView: noItemsView,
ValuethatMakesSense : "I do!",
buildItemView: function(item, ItemViewType, itemViewOptions){
var options = _.extend({model: item}, itemViewOptions);
var name = this.ValuethatMakesSense;
var view = new ItemViewType({name : name});
return view;
}
});
并且在项目 View 的初始化函数中,您可以读取传递的选项。
var noItemsView = Backbone.Marionette.ItemView.extend({
initialize : function (options) {
var name = this.options.name;
console.log(name);
},
tagName: "li",
className: "no-results",
template: "#noresults"
});
我在 collectionView 中使用一个属性,然后读取它/将它传递给 buildItemView 中的空 View ,只是为了测试 buildItemView 函数的功能,您可以在那里进行适当的逻辑检查和验证。
关于javascript - Backbone Marionette : can I supply options to a collectionView's emptyView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17238539/
我是一名优秀的程序员,十分优秀!