不知道如何最好地接近这个,因为我没有在任何地方看到过这样的例子。
基本上,格式化程序定义如下:
...
addBindings: function(){
var collection = this.collection;
rivets.formatters.filterMatch = function(value){
return collection.filters == null || collection.filters === value;
};
this.rivetsView = rivets.bind(this.element, this);
},
...
标记中的:
<ul id="todo-list" rv-each-item="collection#">
<li rv-class-editing="item.editing" rv-show="item#completed | filterMatch">
...
</li>
</ul>
这非常有效(#是从集合中的模型中读取的自定义适配器,使用了{{
/ }}
)。过滤器通常可以是null / undefined(所有模型)或boolean,它将匹配model.completed
值。
问题是如果collection.filters
发生更改,则无法刷新当前视图 - 它只会将cond应用于添加到集合中的新项目。
有没有办法创建一个rv-show / hide cond,用于绑定属性和格式化程序与第二个属性?
尝试强制手动this.rivetsView.sync()
等无效,它没有看到模型的变化并保持显示。过滤器在绑定到同一集合的另一个视图组件中定义/控制。
一个实例:http://fragged.org/epik-todomvc/
这映射到
视图: https://github.com/epitome-mvc/epik-todomvc/blob/master/js/views/todo-list-view.js#L29-L43
和元素: https://github.com/epitome-mvc/epik-todomvc/blob/master/index.html#L19-L32