2012-03-02 2 views
0

Вот скрипка http://jsfiddle.net/srinivasanvee/yYEwJ/2/Knockout JS - наблюдаемый массив должен быть заполнен от объекта подробно

У меня есть список, который имеет категорию, продукт, количество, как колонны, у меня есть возможность добавить новую категорию из выпадающий сам (select --Add new-- option), хотел заполнить наблюдаемый атрибут categoryList из метода подписки категории (поскольку новое добавленное значение должно быть применено ко всем строкам сетки), Не знаете, как сделайте это, попробуйте с $ root.categoryList.push (имя), но не повезло

Или у нас есть ev лучший способ справиться с этим сценарием? помощь по этому действительно ценится, спасибо заранее.

ответ

1

Переменные, такие как $root, доступны только для привязок.

Один из способов сделать эту работу - передать ссылку на вашу модель корневого представления на ваш конструктор cartLine.

Ваш cartLine бы в конечном итоге выглядит как:

var cartLine = function(data1, root) { 
    this.category = ko.observable(data1.category); 
    this.product = ko.observable(data1.product); 
    this.quantity = ko.observable(data1.quantity); 

    this.category.subscribe(function(newValue) { 
     if (newValue == "--Add New--") { 
      var name = prompt("Enter Table Name"); 
      if (name == null) { 
       return false; 
      } 
      else { 
       root.categoryList.push(name); 
      } 
     } 
    }); 
}; 

Тогда вам просто необходимо пройти this в качестве второго аргумента из вашей модели представления при создании нового cartLine. Образец здесь: http://jsfiddle.net/rniemeyer/kzZSH/

В противном случае вы можете создать свою CartLine так, как вы были, и подписаться на ваш viewModel после получения ссылки на новую строку.

+0

Получил, это работает, спасибо большое. – Srini

Смежные вопросы