2016-01-20 105 views
0

我想链接一个<select>框到JSViews中计算的可观察对象。当依赖变量更改时,<select>更新正常。但是,在<select>框中选择新值时,它不会触发我定义的set()函数。见https://jsfiddle.net/4y274h0L/3/JSViews计算observable链接到<select>不更新与.set()

模板

<select> 
    {{for options}} 
     <option value="{{:#data}}" data-link="{:#data} selected{:~root.computedSelectedOption() == #data}"></option> 
    {{/for}} 
</select> 

计算观察到

function privateComputedOption() { 
    return vm.tempSelectedOption; 
} 

privateComputedOption.depends = ["~root.tempSelectedOption"]; 

privateComputedOption.set = function(val) { 
    $.observable(vm).setProperty("tempSelectedOption", val); 
    console.log(val); 
}; 

任何帮助将是非常欢迎!

回答

1

您实际上并没有将select与计算的observable进行数据链接。对于双向绑定,它是在用户更改下拉选择时调用setter的select上的绑定。

<select data-link="computedSelectedOption()"> 
    {{for options}} 
    <option value="{{:#data}}" 
    data-link="{:#data} selected{:~root.computedSelectedOption()==#data}"> 
    </option> 
    {{/for}} 
</select> 

{^{:computedSelectedOption()}} 

我更新了的jsfiddle如上:

https://jsfiddle.net/4y274h0L/4/

参见例如http://www.jsviews.com/#samples/form-els/array-binding

顺便说一句,在JsViews的下一次更新的东西将被简化,你将不需要数据链接到selected{:~root.computedSelectedOption()==#data}"的选项。只需选择<select data-link="computedSelectedOption()">上的数据链接即可。

+0

谢谢!确实如此。在真正的代码中,我仍然使用了对非计算值的旧引用。所以我在select中有一个数据链接,但它是另一个viewmodel属性。 – Laurens