2017-09-12 14 views
0

レベルがいくつでもあり、既存のプロパティを持つことができるオブジェクトがあります。さらに、対象物および/またはその特性を観察することができる。 例えば:私がしようとしたオブジェクトの観測可能なプロパティをパスで設定する

set(obj, 'obsProp.nestedObsProp.prop', 'new value'); 

var obj = { 
    prop: "qqq", 
    obsProp: ko.observable({ 
     nestedObsProp: ko.observable({ 
     prop: 'value' 
     }) 
    }) 
}; 

私はある意味では任意のネストされたレベルの(観測可能と非観測の両方)のすべてのプロパティを設定する方法を持っているために、このようなものが必要lodash関数_.set()を使用すると、それはプロパティが観測可能ではない場合にのみ機能しますが、obj(更新する必要があります)のプロパティは観測可能でもなくてもかまいません。 助けていただきありがとうございます。

答えて

0
function set (source, key, newValue) { 
    const hierarchy = key.split('.'); 
    const property = hierarchy.pop(); 

    const retrived = hierarchy.reduce((source, key) => { 
     return source[key]; 
    }, source) || source; 

    if (ko.isObservable(retrived[property])) { 
     retrived[property](newValue); 
    } else { 
     retrived[property] = newValue; 
    } 
} 
0

yoel neuman、ありがとうございました。私は小規模な訂正で基本的なアプローチとしてあなたの機能を利用しました:残念ながら、私はあなたの答えに投票するほどの評判はありません。あなたの助けを非常に感謝します!

関連する問題