淘汰双向绑定下拉列表

时间:2013-09-17 06:26:39

标签: binding knockout.js html-select

我在从可观察数组中绑定下拉列值时遇到了问题。

  • 模型

    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>

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

0 个答案:

没有答案