我正在寻找一种手动更新observable的方法。我检查了following question但是当我尝试做类似的事情时,我无法达到我的预期。
我出于以下目的需要它。在我的真实代码中,我有类似的东西(包括JS fiddle)。真正的代码要大得多,我试图制作一个可重现的例子,它也没有真正代表我试图解决的问题:
HTML
<button data-bind="click: changeLang">Change</button>
<div data-bind="foreach: last">
<div data-bind="text: lang[$data]"></div>
</div>
JS
lang = {1: "eine", 2: "zwei"};
function getRandomLang(){
var tags = [
{1 : 'one', 2 : 'two'},
{1 : 'eine', 2 : 'zwei'}
];
return tags[Math.round( Math.random() )];
}
function AppViewModel() {
var self = this;
this.last = ko.observableArray([1, 2, 2]);
this.changeLang = function(){
lang = getRandomLang();
//self.last.valueHasMutated();
console.log(lang);
}
}
ko.applyBindings(new AppViewModel());
我希望它在用户点击按钮时更改语言。这正是我想手动更新observable的原因。有没有办法做到这一点?
答案 0 :(得分:0)
您将变量'lang'设置为可观察
var lang = ko.observable({1: "eine", 2: "zwei"});
然后,在你的方法中,
lang(getRandomLang());
这就是你更新observable的方法。知道你想要做什么会更容易,因为我不确定这是否会给你想要的结果。它会更改lang的值,并更新直接绑定到lang的任何内容,但大多数时候observable属性会包装用于显示的基元。
您需要创建一个代表您的UI的模型,您的数据将在该模型中显示。然后,您在数据更改时更改这些值(通过单击,ajax调用等...)