2015-04-09 4 views
-1

Update Я понимаю, что это не «сокрушительный путь», но.выколотки набор элементов данных


Я хотел бы обновить данные непосредственно связанного элемента.

Чтобы получить данные элемента, я хотел бы использовать

var data = ko.dataFor(this); 

Я хотел бы сделать что-то вроде

ko.setData(element, key, value) 

для установки элементов внутренних данных, не вызывая каких-либо привязок.

В настоящее время я делаю следующее.

 var data = {new_data:"yes please"}; 
     ko.cleanNode(element); 
     ko.applyBindings(data, element); 

Я понимаю, что это не лучшая практика, но я бы хотел найти чистый управляемый способ сделать это в любом случае.

После просмотра источника. Можно ли попасть в сеттер для хранилища данных?

комплект: функция (узел, ключ, значение) https://github.com/knockout/knockout/blob/master/src/utils.domData.js line 24;

+2

* «Я хотел бы обновить данные непосредственно связанного элемента». * - Я думаю, вам нужно сначала объяснить это. Это похоже на то, что у вас неправильная базовая концепция. – Tomalak

+1

Это выглядит как [XY question] (http://meta.stackexchange.com/a/66378). Чего вы на самом деле пытаетесь достичь? Борьба с нокаутом, подобная этому, не «не самая лучшая практика», это рецепт мешка с болью, который, скорее всего, вызовет уродливые ошибки, которые могут стать причиной отладки, и, вероятно, легко избежать этого, перейдя на него в другом направлении. – janfoeh

+0

Ну, я чувствую, что привязка foreach слишком много работает, когда небольшое изменение внесено в один из свойств элемента базового массива. Также я не хочу использовать наблюдаемое для каждого свойства. У меня есть механизмы, которые рассказывают мне, что изменилось и где. Отражая, что я хочу сделать некоторые хитроумные обновления html в элементе bound (li), если я не вызываю изменения в наблюдаемом массиве, данные привязки становятся устаревшими. Назовите это личная стратегия оптимизации. Короче говоря, я знаю, что базовая модель изменилась, но я не хочу перестраивать весь список. – beedeejay

ответ

-1

Как и многие из комментариев, этот подход не рекомендуется.

Я поцарапал зуд используя.

ko.contextFor(element); 

, который дал мне доступ к следующему.

$data: Object 
$index: d() 
$parent: Object 
$parentContext: a.N 
$parents: Array[1] 
$rawData: Object 
$root: Object 
ko: Object 

Затем я изменил релевантные свойства объекта $ data.

0

ko.contextFor(element).$data в значительной степени то же самое, что и ko.dataFor(element).

Так что вы можете просто сделать ko.dataFor (element) .relevantProperty ('newValue').

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