我在绑定可观察数组的下拉值时遇到了这个问题。
模型
function question(item) { var self = this; self.questionId = ko.observable(item.questionId || ""); self.position = ko.observable(item.position || ""); self.position.subscribe(function (data) { // Some Logic }, this, 'beforeChange'); api.position.subscribe(function (data) { // Some Logic } }
查看模型
function viewmodel(item) { var self = this; self.questionList = ko.observableArray([]); self.questionEntity = ko.observable(new question(item)); // initially Item will be blank self.addQuestion = function(data) { data.position(self.questionList().length + 1); self.questionList.push(data); } }
看法
<div> question Id : <input type="text" data-bind="value: questionEntity().questionId " > <button data-bind='click: $root.addquestion'>Add Question</button> </div> <table> <tbody data-bind='foreach: questionList '> question Id : <span data-bind='text:questionId' ></span> position : <select data-bind='options: $root.positionList,optionsText: "id",optionsValue: "id" ,value: position'></select> </tbody> </table>
问题
我有一个弹出 div( addQuestion
),我将添加问题。我继续将这个问题添加到我的 observable Array( questionList
)
当我添加第一个问题时,我在可观察数组中的值是
questionId | Position
1 | 1
当我添加第二条记录时
questionId | Position
1 | 1
2 | 2
当我添加第三条记录时,除最后一条记录外,所有以前的记录位置值(值绑定到下拉列表)都被重置为 1
questionId | Position
1 | 1
2 | 1
3 | 3
第四条记录
questionId | Position
1 | 1
2 | 1
3 | 1
4 | 4
调试后我发现它与 Dropdown 的两种方式绑定的问题
<select data-bind='options: $root.positionList,optionsText: "id",optionsValue: "id" ,value: position'></select>
在上面的代码中,如果像下面这样更改绑定(单向),它可以正常工作
<select data-bind='options: $root.positionList,optionsText: "id",optionsValue: "id" ,value: position()'></select>
但我需要为下拉列表订阅一个事件。