私の仕事は、添付されたオブザーバブルが変更されるたびに、リンクの「href」を動的に形成することです。例のリンクは次のとおりです: JS Fiddle example link
これを達成するとき、私は2つの問題に遭遇しました:
文字列 + 計算されたオブザーバブルを渡そうとすると、値の代わりに計算された関数のリストが表示されます。
<a data-bind="attr: {href : '#someHash/' + getHref(10)}">Link</a>
リンクは次のようになります。
http://fiddle.jshell.net/3DAfQ/1/show/#someHash/function h(){if(0<arguments.length)return"function"===typeof v?v.apply(d,arguments):j(Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.")),this;n||g();b.r.Wa(h);return l}
これは適切でさえありません。
2 番目に、監視可能な、計算された依存関係を変更しようとすると、リンクは変更されません。
<a href="#" data-bind="click: changeStoreHref(20)">change Link</a> self.changeStoreHref = function(num) { self.storeHref(num); };
HTMLコードは次のとおりです。
<a data-bind="attr: {href : '#someHash/' + getHref(10)}">Link</a>
<a href="#" data-bind="click: changeStoreHref(20)">change Link</a>
そしてノックアウトjs:
function viewModel()
{
var self = this;
self.storeHref = ko.observable('ten');
self.getHref = function(id)
{
return ko.computed({
read: function()
{
self.storeHref(id);
return self.storeHref();
}
});
};
self.changeStoreHref = function(num)
{
self.storeHref(num);
};
}
ko.applyBindings(new viewModel());
この例は、次のリンクで確認できることを思い出してください: JS Fiddle example link ありがとうございます。