我的视图模型具有很少的可观察属性,我使用它们来存储来自下拉列表的值,基本上就像这里解释的购物车示例一样。
knockoutjs 'Cart editor' example questions
这是我的HTML 1)选择boardtest 2)为每个部分选择分数
<select data-bind="options :$parent.boardTestData,optionsText:'name', value:boardTestSelected, optionsCaption:'Select Test' "> </select>
<div data-bind="visible : boardTestSelected, foreach : boardTestSelected() ? boardTestSelected().testParts : null">
<div>
<span data-bind="text: boardTestPartName"></span>
<select data-bind="options: testPartValues, optionsText:'BoardTestPartValue',
value: $parent.testPartValueSelected> </select>
</div>
</div>
我的视图模型有
$ parent.boardTestData是一个obervablearray(),其数组类型为testParts [] 和testParts包含另一个数组testPartValues []
class @BoardTestData
constructor :(data) ->
@id = data.Id
@name = data.Name
@testParts = []
@testParts.push new TestParts data.Name,d for d in data.TestParts
class @TestParts
constructor:(partData) ->
@testPartValues = []
class @TestPartValues
constructor:(partValues) ->
@BoardTestPartValueId= partValues.Id
@BoardTestPartValue = partValues.Value
@boardTestSelected = ko.observable()
@testPartSelected = ko.observable()
@testPartValueSelected = ko.observable()
我已经订阅了testPartValueSelected,并且它首次使用正确的值执行两次,然后是witj null值,所以我认为有一些东西将@testPartValueSelected设置为null或undefined。
虽然我这样做的另一个问题是我可以将选定的值从下拉列表推送到数组或obersvable数组()?
为此问题设置JS小提琴:http://jsfiddle.net/paisley/W82yE/11/
答案 0 :(得分:0)
当您给@BoardTestData一个值时,会触发订阅。这是因为knockout会自动将下拉列表的value
分配给第一个值。您已将值设置为testpartvalueselected
变量,以便设置。
稍后再次将其设置为新的ko.observable()。 knockout再次检测到更改并点击订阅。
将值分配给下拉列表时,无需手动设置相应的“选定”值。它已经为你设定了。