0

我正在使用 html/js/knockout 的页面中工作。此页面包含一个从服务填充的表。此页面还包含过滤器,例如选择控件,用户可以在此控件上选择项目并查看包含数据的新更新表。与服务器的连接和绘图工作正常。我遇到的问题是如何使用过滤器处理表的负载,因为首先我使用所有默认参数调用我的服务。我的代码是这样的:

export var selectedType= ko.observable();

export function activate() {    
  loadInitData();
}

function loadInitData() {
   datacontext.getTypes(TypesObservable);
  datacontext.getRegistration(registrationsObservable, 'allTypes'); //just making simple
}

selectedType.subscribe(function (newValue) {    
   //calling to my service.
    datacontext.getRegistration(registrationsObservable, newValue.name);
   //My issue: this section is called also when my registrationsObservable are populated the first time.
 });

这段代码的问题是表格被填充了不止一次。(实际上我的页面中还有 3 个过滤器)。此链接显示的内容与我所描述的相似:http: //jsfiddle.net/rolandomartinezg/U66n9/2/

谢谢!

4

2 回答 2

1

如果添加 optionsCaption,则 selectedFruit 将保持为空,直到做出选择。

http://jsfiddle.net/danne567/U66n9/5/

<select data-bind="options: items, optionsText: 'name', optionsCaption: 'Select fruit', value: selectedFruit"></select>

<span data-bind="text: selectedFruit() ? selectedFruit().name : ''"></span>
于 2013-06-17T20:09:29.287 回答
1

您可以使用这样的计算域

vm.registrationsFiltered = ko.computed(function() {
         //return
    if(vm.selectedFruit && vm.selectedFruit() && vm.selectedFruit().name){
     return  $.grep(vm.registrations(),
                           function(item,idx){
                               return item.name === vm.selectedFruit().name
                           });


    }
    }, this);

然后更改您的视图以改用新的过滤属性。我已将它添加到您的小提琴中:http: //jsfiddle.net/U66n9/9/

于 2013-06-17T20:55:07.593 回答