刷新rivets.js rv-show通过自定义格式化程序通过另一个值绑定到一个值

时间:2014-01-16 10:08:20

标签: javascript rivets.js

不知道如何最好地接近这个,因为我没有在任何地方看到过这样的例子。

基本上,格式化程序定义如下:

...
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

0 个答案:

没有答案