2015-11-01 33 views
0

我有以下助手定义:JsViews数据链路助手功能

$.views.helpers({ 
    total: function(lines) { 
     var total = 0; 

     for (var i = 0; i < lines.length; i++) { 
      total += lines[i].price * lines[i].quantity; 
     } 

     return total; 
    } 
}); 

然后我有以下代码到数据我的模型链接到我的观点:在视图中

var model = { 
    lines: [] 
}; 

$("#lines").link(true, model); 

最后我有以下几点:

<span data-link="~total(lines)"></span> 

然而,每当我观察地添加或删除的数组项它没有ü更新总数。我读过你可以将lines.length传入函数,并且每次添加或删除一个项目时都会更新总数。但是,当我明显地更新数量属性对任何行,总没有更新。

我会很感激,如果有人能告诉我如何做到这一点。

感谢

回答

0

是的,正如您在https://github.com/BorisMoore/jsviews/issues/280中发现的那样,目前还没有声明性语法来取决于“全部”。 V1.0为特色将被添加后可能 - 沿total.depends = "lines**";total.depends = "lines*.*";针对助手行:function total(...) ...

期间,你可以使用一种编程方法 - 这仍然是很容易的。只需通过增加触发刷新:

$.observable(model.lines).observeAll(function() { 
    $("#lines").link(true, model); 
}) 

或书写刷新只是 '总' 跨度:

<span id="total" data-link="~total(lines)"></span> 

$.observable(model.lines).observeAll(function() { 
    $("#total").link(true, model); 
}) 

见例如:http://jsfiddle.net/BorisMoore/wch601L9/

+0

感谢鲍里斯。我一直在生产中使用它一段时间,它一直非常稳定,所以我相信一个v1并不遥远。我只会要求一个小建议。如果你可以说$(selector).link(model)而不是传入true,那将会很好。看看代码,它应该只是检查第一个参数是否为对象的一种情况。 – nfplee

+0

使用$(selector).link(true,model ...)的语法具有与$(selector).link(linkExpression,model ...)明显不同的优点。如果存在“true”,那么它将激活声明式数据链接表达式。如果没有,那么它以编程方式绑定linkExpression。传递布尔值的努力是我认为API的更多'自我记录'性质是合理的。第二个参数始终是模型。第一个是用于声明性绑定的标志(真),或者是用于编程式绑定的表达式。 – BorisMoore

+0

感谢您的澄清。你有任何程序化绑定的例子吗?我只通过传入true来使用声明性绑定。 – nfplee