Knockout.js 绑定选项:在选择中,无法在init上选择正确的值
我有以下选择:Knockout.js 绑定选项:在选择中,无法在init上选择正确的值,knockout.js,Knockout.js,我有以下选择: <select data-bind=" options: states, optionsText: 'acronym', optionValue: 'stateId', value: state"> </select> 但是当我调用ko.applyBindings(newaddressviewmodel())时平均值状态丢失其原始
<select data-bind=" options: states,
optionsText: 'acronym',
optionValue: 'stateId',
value: state">
</select>
但是当我调用ko.applyBindings(newaddressviewmodel())时代码>平均值状态丢失其原始值,尽管该值在列表中
我已经尝试反转
getJSON
顺序(状态之前的状态,反之亦然),但没有发生任何新的情况。您必须创建一个函数,并将代码块$.getJSON(“/api/v1/user/address/”)移动到函数内。然后,在调用ko.applyBindings(new AddressViewModel())后调用该函数这里实际上有一些问题
选项value
值拼写错误选项value
选项,当您从下拉列表中选择项目时,您将State.stateId
写入AVM.State
;但是在初始化调用中创建一个对象:self.State(新状态(data.State))
。您不能期望这样做;您正在使用对象引用进行初始化,但使用文本值进行更新optionValue
选项不正确,并且希望保持其工作状态,请首先删除optionValue
,以免混淆。接下来,请注意对象将写入AVM.state
。对象等价性测试是通过引用而不是通过深入检查对象来完成的s值。您需要从AVM.states
中提取一个引用,并将其写入AVM.state
。类似以下内容:
// Use the data.state.StateId to find the correct state from the states list.
self.state(ko.utils.arrayFirst(self.states(), function (s) {
return s.stateId() === data.state.StateId;
}));
ko.applyBindings(AVM);
被调用,选项:绑定空的AVM.states
列表AVM.state
AVM.state
不在AVM.states
中,并将NULL写入AVM.state
AVM.states
被设置AVM.states
用选项更新下拉列表,默认情况下选择第一个选项选项value
:
版本2-删除选项值并使用对象引用:
事实上,我没有使用OptionValue。我之所以使用它,是因为我不知道还需要做什么。我的代码似乎与您在版本2中所做的非常接近,只是从您初始化状态的方式不同。我将对您的解决方案进行更深入的研究,看看是否发现了任何其他差异。感谢您非常详细的回答。啊,好的-在这种情况下,您只需要拉一下您的州列表中的参考使用了我在上面的答案中包含的ko.utils.arrayFirst call。很高兴能够提供帮助。:-)
// Use the data.state.StateId to find the correct state from the states list.
self.state(ko.utils.arrayFirst(self.states(), function (s) {
return s.stateId() === data.state.StateId;
}));