1

我在绑定可观察数组的下拉值时遇到了这个问题。

  • 模型

    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>

但我需要为下拉列表订阅一个事件。

4

0 回答 0