2014-12-17 4 views
0

Я разрывая на себе волосы, может кто-то пожалуйста, спаси меня ...Нокаут Компоненты Выберите Функции

Я хочу создать простой компонент нокаута, который визуализирует отборный список, основанный на объекте JSON. Это работает, когда я использую простой строковый массив, но когда я использую объект JSON, с атрибутами id и name, которые связаны с параметрамиText и optionsValue, я получаю раскрывающийся список с [объектом объекта].

Любая помощь была бы принята с благодарностью.

 ko.components.register("organization-select", { 
      viewModel: function (params) { 
       var self = this; 
       self.organizationList = ko.observableArray([]); 
       self.organizationList(["foo", "bar"]); //this works 

       //this doesn't work Result => [Object Object],[Object Object] 
       self.organizationList([{ "id": 1, "name": "foo" }, { "id": 2, "name": "bar" }]); 
      }, 

      template: 'Organizations: <select data-bind="options: organizationList, optionsText: "name", optionsValue: "id""></options>' 
      //this works with simple array of strings 
      //template: 'Organizations: <select data-bind="options: organizationList"></options>' 
     }); 
     ko.applyBindings(); 
    }); 

ответ

2

Котировки выглядят перепутались:

template: 'Organizations: <select data-bind="options: organizationList, optionsText: "name", optionsValue: "id""></options>' 
// Here ------------------------------------^ but then ------------------------------^ 

... и поэтому вариант data-bind фактически содержит только

data-bind="options: organizationList, optionsText: " 

Вы должны избежать этих внедренные кавычки. Вероятно, проще всего использовать изолированные экраны:

template: 'Organizations: <select data-bind="options: organizationList, optionsText: \'name\', optionsValue: \'id\'"></options>' 
+0

Это работает, спасибо большое. – user95488