我在KnockoutJS
使用data-bind
View
<div>
<h2 data-bind="text: wTitle"></h1>
<div data-bind="text: wSynopsis"></div>
</div>
个元素:
ViewModel
在我的observables
中,我有AJAX
来控制这些元素。他们改变了元素。内容基于ViewModel
对维基百科的调用。
以下是我的var ViewModel = function() {
self = this;
this.wTitle = ko.observable('');
this.wSynopsis = ko.observable('');
this.wikiInfo = function(i) {
var wikiURL = 'https://en.wikipedia.org/w/api.php?action=opensearch&search=' + i + '&format=json&callback=wikiCallback';
$.ajax({
url: wikiURL,
dataType: 'jsonp',
success: function(response) {
return new parseAjax(response);
}
})
.fail(function() {
return "Error: Cannot load Wikipedia data!";
});
}
this.wikiInfo(Model.currentMarker);
var parseAjax = function(response) {
self.wTitle(response[0]);
self.wSynopsis(response[2]);
};
}
(我删除了任何不相关的代码):
Model
我的var Model = {
currentMarker: 0
};
位于下方(为简单起见,删除了所有不相关的代码):
observables
现在,我想访问ViewModel
并从我init()
之外的ViewModel
之外更改其价值(即var init = function() {
Model.currentMarker = marker;
ko.applyBindings(new ViewModel());
}
之外的Model.CurrentMarker
。
ViewModel
一种方法是更改已在ViewModel.wikiInfo(Model.CurrentMarker)
之外的View
,并通知subscribe()
更改,以便自动刷新ViewModel
,但我认为我只能var init = function() {
ViewModel.wikiInfo.subscribe(function(newValue) {
Model.currentMarker = newValue;
}); // Not working
ko.applyBindings(new ViewModel());
}
Model.CurrentMarker
内的ViewModel.wikiInfo(Model.CurrentMarker)
观察,我不知道如何应用它:
ViewModel
另一种方法是更改var init = function() {
Model.currentMarker = marker;
ViewModel.wikiInfo(Model.CurrentMarker); // ViewModel is not created yet
ko.applyBindings(new ViewModel());
}
,然后致电ViewModel
。
我不能这样做,因为我无法访问init()
。
init()
由于其他代码要求:
ViewModel
的开头创建ViewModel
。dictionary = File.readlines(filename)
sample_word = dictionary.sample.chomp
until sample_word.length.between?(5, 12)
sample_word = dictionary.sample.chomp
end
puts sample_word
之外使用chomp
,我无法将其放入我的\n
\r
。答案 0 :(得分:2)
这会有用吗?创建对ViewModel
实例的引用。
var init = function() {
Model.currentMarker = marker;
var vm = new ViewModel();
ko.applyBindings(vm);
vm.wikiInfo(Model.CurrentMarker);
}