Присвоение значений нокаутируемым наблюдаемым, динамически определяемым по имени строки - PullRequest
8 голосов
/ 18 января 2012

У меня есть два вопроса, пожалуйста:

Я использую нокаут (я нокаут KO), и я хотел бы присвоить значение определенному нокауту, наблюдаемому при событии щелчка, но которыйдолжно быть определено только по самому событию click (и значению, которое я передам data-bind = click) ... это можно сделать, пожалуйста ... могу ли я получить наблюдаемую переменную нокаута только по ее имени (строковое значение) вместо того, чтобы знать, какую наблюдаемую я собираюсь заранее присвоить значению?

И, во-вторых, неважно, существует ли такая функция ko.ObservableByName (stringName), можно ли ее как-то использовать иназначить предварительный выбор нескольких элементов выбора при загрузке страницы ... и как, пожалуйста?

Я пытался это сделать ... Я использовал data-bind = "click: loadData.bind ($ data, ' param1 ', ' param2 ') ", и тогда я могу получить эти param1 и param2 строковые значения путем создания обработчика событий в моей нокаутируемой моделиЧто-то вроде:

self.loadData = function (src, dest) {
    //dest is 'param1', src is 'param2', both are stings
    if (src == 'param1')
       self.p1observable($('#' + dest).val());
    else
       self.p2observable($('#' + dest).val());
}

Моя самая большая проблема с этим заключается в том, что мне нужно построить функцию с уже указанными и жестко закодированными в ней наблюдаемыми p1 / p2, но на самом деле я бы хотелполучить param1 и param2 для использования в качестве имен или ссылок по именам некоторых из моих наблюдаемых, которые я мог бы затем передать по своему желанию (наряду с назначаемым значением или, еще лучше, с другой наблюдаемой, из которой я хотел бы скопировать значение впервый), и, таким образом, я мог назначить переданные значения в вызове функции click непосредственно наблюдаемой по моему выбору (и не иметь большого количества таких маленьких функций) ...

Может быть, яне так?Может быть, мне вообще не следует передавать строковые значения ... Может быть, мне следовало бы попытаться передать наблюдаемый объект, но как это можно сделать внутри привязки данных, вы просто пишете myViewModel.myObservable или что-то в этом роде?

1 Ответ

15 голосов
/ 18 января 2012

Если у вас есть родительский объект, вы можете получить доступ к наблюдаемому, используя этот синтаксис:

viewModel[observableName]

и установите значение следующим образом:

viewModel[observableName](newValue)

Вот пример, где вы можете выбрать имя свойства из выпадающего списка, а затем установить соответствующее значение и еще один, где кнопка связана непосредственно с установкой наблюдаемого / значения: http://jsfiddle.net/rniemeyer/CTnUQ/

...