淘汰赛JS选择框问题

问题描述:

我使用淘汰赛3.4.0我用MooTools的一起项目。我需要存储字段的信息。其中一个信息是通过KO加载的选择框。淘汰赛JS选择框问题

<select data-bind="options: agencyContacts,optionsText: 'name',optionsValue:'id' , optionsCaption: 'Please select...',value:agencyContactSelected"> 

信息保存在数据库中。从数据库加载相同的信息时,我需要使用相应的数据库条目自动选择选择框。我的ViewModel如下所示。

var vm={}; 
var Information = { 

    Implements: [Options, Events], 

    /** 
    * Method: initialize 
    * 
    * Parameters: 
    * options (object) - the options object 
    */ 
    initialize: function(options) { 

     var self = this; 
     self.draw(); 
    }, 
    draw: function() { 
     vm.agencyContactViewModel.agencyContactSelected(<ID>); 
    } 
} 

var agencyContactViewModel = function() { 
    var self = this; 
    self.agencyId = ko.observable(); 
    self.agencyContacts = ko.observableArray(); 
    self.agencyContactSelected = ko.observable(); 
    self.agencyContactSelected.subscribe(function(newAgencyContactSelected) { 
      alert(newAgencyContactSelected); 
    }); 

    self.agencyId.subscribe(function(newAgencyId) { 
     self.agencyContacts.removeAll(); 
     self.address(); 
     var submitObj = { 
      'contactId': newAgencyId 
     }; 
     var myRequest = new ReqJSON({ 
      'url': '/gateway?file=contacts.views&method=getContactRefs', 
      onSuccess: function(responseJSON) { 
       if (responseJSON.length > 0) { 
        var length = responseJSON.length; 
        for (var i = 0; i < length; i++) { 
         self.agencyContacts.push(responseJSON[i]); 
        } 
       } 
      } 
     }).send(JSON.encode(submitObj)); 
    }); 
} 

myInformation = new Information(); 

window.addEvent('domready', function() { 
    vm.agencyContactViewModel = new agencyContactViewModel(); 
    ko.applyBindings(vm.agencyContactViewModel, document.getElementById('agency_contact_wrapper')); 
}); 

虽然我已经设置了正确的ID为选择框时,相应订阅功能“agencyContactSelected”观察到的被调用两次,首先具有从DB的ID,并且具有未定义值的第二时间。由于这个未定义的值,选择框没有被设置。可能是什么原因?

PS:如果我删除“值:agencyContactSelected”从HTML中,认购正确调用即与DB值一次。

+0

当'agencyId'变化,你清楚的定义所有'agencyContacts'。这将重新评估'选项'绑定,删除其中的所有'选项'。仍然有一个选定的ID,但淘汰赛将无法找到相应的值。这将导致设置一个未定义的值。之后,当(异步)项目重新出现时,它将失去其选择状态并且无法检索它。 – user3297291

+0

@ user3297291即使我删除了agencyContacts更新的agencyId订阅功能,agencyContactSelected订阅功能仍被调用两次。 – Vivek

我看到你的问题几个令人惊奇的元素:

  1. 为何使用optionsValue?这似乎并不在这里
  2. 有用在你draw功能,你叫agencyContactViewModel.agencyContactSelected,但agencyContactViewModel是一个函数。对于功能和您的视图模型的财产都使用相同的名称是相当棘手,你应该避免
  3. 我没有看到你的vm变量
+0

1)I的印象,无论在optionsValue将在agencyContactSelected(值属性被设置) 2)I错过指定 3)编辑 – Vivek

+0

任何改善?此外,由于'Information'不是一个功能,我很好奇,想知道这是什么代码所做的:'myInformation =新的信息();' –

+0

无改善still.Information是MooTools的基础类。在调用新的Information()时,它将调用Information类中的initialize方法。 – Vivek