2014-09-25 107 views
0

当您绑定数据链接中的其他属性时,默认的bindng和trigger = true停止工作。没有错误或任何明显的。但它不起作用。JsViews:双向绑定问题

缺省绑定

在此示例中(http://jsfiddle.net/BorisMoore/wch601L9/)中, “量” 属性不设定属性(例如值{:量})绑定明确。有用!

<td><input data-link="amount trigger=true" /></td> 

如果您通过添加附加绑定来更改此代码,默认绑定“数量”不再显示在文本框中。

<td><input data-link="amount trigger=true disabled{:isSameAmountForAll}" /></td> 

这里(http://jsfiddle.net/michaelsync/xzo15n0s/)是我BorisMoore的榜样叉版本,我所做的更改显示了这种情况。

我找到的解决方案是明确设置所有绑定的属性名称。

<td><input data-link="value{:amount} trigger=true disabled{:isSameAmountForAll}" /></td> 

这是已知的问题吗?

触发=真

如果您在文本框(例如样品http://jsfiddle.net/michaelsync/xzo15n0s/)输入一些数字,你会看到总好好尝试一下得到更新。

我不知道如何解决这个问题。这是否也是一个已知问题?

请随时让我知道,如果这个问题不清楚。谢谢!

注意:如果您想知道为什么要绑定两个属性,那么这就是我正在测试的示例。 http://jsfiddle.net/michaelsync/078cazh8/2/

更新#1:

我现在调试运行的JsViews源代码。我修改了我的代码示例以进行调试。

这是v1。 http://jsfiddle.net/michaelsync/tmwyhc7n/1/

只有一个结合

<script id="personTmpl" type="text/x-jsrender"> 
    <input data-link="amount trigger=true" /> <br/> 
</script> 

<div id="placeholder" ></div> 

JS

var myTemplate = $.templates("#personTmpl"); 

var people = [ 
    { 
    name: "Adriana", 
    amount: 10, 
    isSameAmountForAll: false  
    } 
]; 

myTemplate.link("#placeholder", people); 

我设置的断点function parseTag(all, bind, tagName, converter, colon, html, comment, codeTag, params, slash, closeBlock, index)

我拿到的只是打了 “一切” 的价值模板参数是“”{{:amount trigger = true}}“”

现在,我添加了如下附加绑定。

<script id="personTmpl" type="text/x-jsrender"> 
    <input data-link="value{:amount} trigger=true disabled{:isSameAmountForAll}" /> <br/> 
</script> 

<div id="placeholder" ></div> 

V2:http://jsfiddle.net/michaelsync/tmwyhc7n/2/

然后我有两个安打,因为我绑定“量”和“isSameAmountForAll” ..你看到“触发=真”中缺少解析。

所以..我在数量内移动了“trigger = true”。

<script id="personTmpl" type="text/x-jsrender"> 
    <input data-link="value{:amount trigger=true} disabled{:isSameAmountForAll}" /> <br/> 
</script> 

<div id="placeholder" ></div> 

V3:http://jsfiddle.net/michaelsync/tmwyhc7n/3/

更新#2:

解析似乎是正确的,但ObserverAll不工作..

我改变了下面的代码来检测量的变化但事件不会被触发。

// http://stackoverflow.com/questions/25721180/summary-value-calculation-with-jsviews 

var myTemplate = $.templates("#personTmpl"); 

var people = [ 
    { 
    name: "Adriana", 
    amount: 10, 
    isSameAmountForAll: false  
    } 
]; 

myTemplate.link("#placeholder", people); 

$.observable(people).observeAll(function() { 
    console.log('weird stuff'); 
}); 

V4:http://jsfiddle.net/michaelsync/tmwyhc7n/4/

回答

0

你需要

<input data-link="{:amount trigger=true:} disabled{:isSameAmountForAll}" /> 

http://www.jsviews.com/#linked-elem-syntax

有多个绑定,每个绑定需要是完整的语法(与{...})。对于双向绑定,它需要使用默认绑定目标(属性) - 因此不要指定目标属性:

{:amount trigger=true:}

对于单向绑定,您可以指定其他目标,如disabled

disabled{:isSameAmountForAll}

+0

太棒了!非常感谢! – 2014-09-26 00:57:47