Knockout JS обвързване към елемент от масив вътре в наблюдаем обект според някакво условие

Искам да обвържа моята стойност за въвеждане на текст

<input type="text" id="2" data-bind="value :  ??whatToWriteHere??    ">

към второто свойство име на обект в следния наблюдаем обект ( където input.id == object.id )

myObject = {
    myArray : [ { id:1, name:'one' },{ id:2, name:'two' },{ id:3, name:'three' } ]
},
myObservableObject = ko.observable(myObject);

С какъв израз трябва да заменя ??whatToWriteHere??

Редактирано: всъщност масивът не е задължително да бъде в друг обект

 myArray : [ { id:1, name:'one' },{ id:2, name:'two' },{ id:3, name:'three' } ]
 myObservableArray = ko.observableArray(myArray);

person nilgun    schedule 05.07.2012    source източник


Отговори (2)


Имам решение, базирано на ко.mapping плъгин и персонализирано обвързване, създадено за вашата цел .

Можете да видите работеща цигулка тук:

http://jsfiddle.net/ingro/MhdZp/

Цялата идея е да картографирате своя observableArray и след това да извлечете този, свързан с вашия входен идентификатор с функцията mappedIndexOf на плъгина за картографиране.

person Ingro    schedule 05.07.2012

Зависи какъв е контекстът на данните на входа. Ако обектите в myObservableArray са обвързани с шаблонни входни елементи, тогава обвързването ще бъде "стойност: име". Използвате ли foreach? Или тук има само един входен елемент, който изрично искате да свържете към този втори елемент от масива, където myObservableArray току-що е деклариран някъде в страницата? Ако е така, ще бъде "стойност: myObservableArray()[1].name".

person Tom W Hall    schedule 05.07.2012
comment
Имам около 10 (това число може да се променя динамично, независимо от myArray) входни елементи, а myArray може да има 0-10 елемента в него (това число също е динамично). Не използвам foreach, дори и да съм използвал, това няма да зависи от моя масив. Искам да съпоставя входните си елементи с елементите в масива въз основа на атрибута id на входните елементи и свойството id на елементите на масива. - person nilgun; 05.07.2012
comment
Входящите данни и техните идентификатори генерират ли се от страна на сървъра? Ако е така, не можете ли да използвате каквато и да е логика на изглед, която използвате, за да генерирате id=2, за да включите това 2 (минус 1, за да получите индекса на масива) в обвързването? напр. стойност: myObservableArray()[2 - 1] където 2 се генерира с какъвто и да е синтаксис на изглед от страна на сървъра, който използвате. Правилно ли го разбирам? - person Tom W Hall; 05.07.2012
comment
Всъщност случаят е такъв. Да предположим, че имам списък с всички марки автомобили, налични в магазин (да речем 10), и има входен елемент за всяка марка, чиито идентификатори са равни на съответстващия им идентификатор на марка. Имам клиент, който има няколко коли (да речем 3) и се опитвам да напиша плащането на клиента в тези входни елементи. така че идентификаторите са идентификатори на марка. Използвам уеб услуги за извличане на данни и динамично изграждане на страница с помощта на JQUery. - person nilgun; 05.07.2012