2016-02-24 2 views
0

Поэтому у меня есть четыре модели:Нокаут вложенные объекты привязок не работает (объекты не определено)

  • лобби (модель вид)
  • Сообщения
  • Кампании
  • кампании

И У меня они настроены так:

 Lobby: function(Messages, Campaigns) { 
      var self = this; 
      self.chat = new Messages(); 
      self.campaigns = new Campaigns(); 
     }, 
     Campaigns: function() { 
      var self = this; 
      self.campaigns = ko.observableArray(); 
     }, 
     Messages: function() { 
      var self = this; 
      self.message = ko.observable(""); 
      self.messages = ko.observableArray(); 
     }, 
     Campaign: function(campaign) { 
      var self = this; 
      var status = ["In Lobby", "In Game", "Finished"]; 
      self.Id = ko.observable(campaign.Id); 
      self.url = ko.observable("/matchmaking/" + campaign.Id); 
      self.mapName = ko.observable(campaign.Map); 
      self.mapImage = ko.observable("/Images/"+ campaign.Map +".jpg"); 
      self.notes = ko.observable(campaign.Notes); 
      self.status = ko.observable(status[campaign.status]); 
     } 

И у меня есть простое связывание для просмотра каждого сообщения в модели чата:

<div id="chat-messages" data-bind="foreach:chat.messages" style=" max-height: 250px; min-height: 80px; overflow-y: auto;"> 
         <div data-bind="text:$data"></div> 
        </div> 

Применить привязки Добавлено:

ko.applyBindings(this.viewModel); //where this.viewModel is an instance of Lobby 

Однако я получаю следующее сообщение об ошибке:

Uncaught ReferenceError: Unable to process binding "foreach: function (){return chat.messages }" Message: chat is not defined

Я пробовал поместить их все в одну модель, разбив их вот так. Аль сортирует, он просто не хочет работать. Какие-либо предложения?

+2

'foreach: chat(). Сообщения'? – artm

+0

@artm, вероятно, на месте, на вид опечатки, я бы предположил, случается с лучшими из нас :-) (@ QBM5 'chat' является наблюдаемым в' Lobby') – Jeroen

+0

Да, artm, спасибо, напишите как ответ и я приму – Jay

ответ

1

Lobby «s chat является функцией Messages типа так, используя связывание data-bind="foreach:chat.messages" переводит Lobby.chat, которая возвращает функцию. Поэтому вам нужно изменить привязку к data-bind="foreach:chat().messages"

1

ваша проблема в том, что chat является наблюдаемой и как таковой вы должны вызвать chat().messages :)

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