我在从可观察数组中绑定下拉列值时遇到了问题。
模型
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
),我将添加问题。我继续将这个问题添加到我的可观察数组(questionList
)
当我添加第一个问题时,我在可观察数组中的值是
questionId | Position
1 | 1
当我添加第二条记录时
questionId | Position
1 | 1
2 | 2
当我添加thrid记录时,所有先前记录的POSITION值(值绑定到下拉列表)将被重置为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>
但是我需要为下拉列表订阅一个事件。