2016-05-09 5 views
0

Я работаю над веб-приложением ASP MVC. Часть сервер-клиент выполняется с помощью SignalR. Часть сервера выполнена на C#, где реализована игра, а часть клиента - в javascript с использованием Knockout.Массив строк в нокаут

Для шахматной доски есть 64 img-теги. Исходные пути для этих изображений хранятся в списке строк в клиентской части. Используя SignalR, я могу передать этот массив клиенту.

У меня проблемы с привязкой этого массива к моим изображениям, я не могу использовать data-bind = "foreach: pathArray", потому что те теги img имеют разные классы CSS (белый/черный) и разные идентификаторы. Поэтому я пытаюсь связать источник с такими путями

data-bind="attr: { src: pathArray()[1]}" 

но он не работает.

Отладка в Chrome, я видел, что массив в javascript заполнен, но я не могу привязать элемент к нему к тегам img.

Есть ли другой способ сделать это? Как и другая библиотека javascript?

EDIT: Вот как я это объявил. self.CellList = ko.observableArray ([]);

Вот как я поместил в него данные.

for (i = 0; i < cellList.length; i++) { 
      viewModel.CellList.push(cellList[i]); 
     } 

, где cellList - это строковый массив, полученный от SignalR.

hub.client.beginGame = function (gameDetails, cellList) 
+0

Является ли ваш 'pathArray' наблюдаемым массивом? ('ko.observableArray') Если это не так, вам не нужно использовать круглые скобки. – user3297291

+0

Пожалуйста, включите [mcve] в свой пост. Без способа воспроизвести вашу проблему мы можем только догадываться о решении. – Jeroen

+0

Вы уверены, что используете его правильно? Например, так вы получите результат от регулярного массива против наблюдаемого массива в KO: https://jsfiddle.net/kasperoo/gtb2L0m5/. Но для вас было бы очень трудоемко, вручную указать каждую ячейку с индексом массив. Не было бы лучше создать мини-объект для каждой ячейки, к которому вы можете передать такие параметры, как идентификатор, имена классов и URL-адреса? – kasperoo

ответ

0

Без больше кода, трудно сказать, в чем проблема, но вместо того, чтобы вставить строки непосредственно я хотел бы создать виртуальную машину для каждого элемента в «cellList»

var cell = function(data,index){ 
    var self = this; 

    self.class = index%2==0?'black':'white'; 
    self.id = 'prefix'+data.id 
} 

Имея логику в представлении это всего лишь проблема. Вытягивание его в vm решает много проблем.

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