2013-06-27 5 views
0

Это может быть довольно простой, но я просто не могу понять это. Проблема идетНокаут не может получить доступ к наблюдаемому массиву изнутри модели

У меня есть модель с наблюдаемым массивом «self.product» и вы хотите получить к ней доступ из вложенной модели, как показано ниже. когда я запускаю это, я получаю сообщение об ошибке, что продукт не существует. Я не включил код, но есть ajax-вызов, который получает данные и подталкивает его к «продукту». Также, используя привязку клика на функции «тест», распечатывает значение.

Возможно, это может быть проблема с понятием «я», но поскольку я использую массив «product» в привязке foreach в разметке, я не могу просто изменить self.product ... на var product. как я могу это сделать?

var viewModel = function() { 
     var self = this; 
     self.product = ko.observableArray([]); 
var orderItem = function (data) { 
      var self = this; 
      self.PlayDuration = ko.computed(function() { 
       var foo = self.product()[0].something(); 
       return foo; 
      }); 

     } 
self.updateTotals = function() { 
      console.log(self.product()[0].something()); 
     } 
}); 
+0

Вы скрываете 'self' с внутренней декларацией на' orderItem' (которую я не вижу даже в использовании). Если вы ставите свой код в скрипку, мы можем помочь больше. – Tyrsius

+0

почтовый код, который генерирует ошибку. – Brandon

+0

orderItem также заполнен из AJAX. Я попытаюсь собрать что-то для скрипача, однако он очень зависит от данных с сервера. код не работает в этой строке var foo = self.product() [0] .something(); –

ответ

1
var root = this; 

Добавить эту линию к внешнему ViewModel и использовать его во внутренних ViewModels.