希望这对某人有所帮助,Knockout 对我来说是一段旅程,也是一个令人心碎的模特。
单击按钮时我需要加载或多或少的内容,所以起初我认为这会对我有所帮助,这是我的第一种方法:
var Task = function(name, description) {
this.name = ko.observable(name);
this.description = ko.observable(description);
}
var ViewModel = function() {
var self = this;
self.tasks = ko.observableArray();
self.clearTask = function(data, event) {
self.tasks.remove(data);
};
self.addTask = function() {
var task = new Task("new", "");
self.tasks.push(task);
};
self.addTask2 = function (name, description)
{
var task = new Task(name, description);
self.tasks.push(task);
}
};
var vm = new ViewModel();
vm.addTask2("Dog Food","description");
ko.applyBindings(vm);
function ClickedMoreItems()
{
vm = new ViewModel()
vm.addTask2("Dog Food2","description");
vm.addTask2("Dog Food3","description");
}
function ClickedLessItems()
{
vm = new ViewModel()
vm.addTask2("Dog Food4","description");
}
点击 ClickedMoreItems() 后,什么也没发生。所以我决定在每个函数中再次使用ko.applyBindings(vm);,它有点工作。但是当我点击 ClickedLessItems 时,“Dog Food4”被复制了两次。
function ClickedMoreItems()
{
vm.Clear();
vm.addTask2("Dog Food2","description");
vm.addTask2("Dog Food3","description");
ko.applyBindings(vm);
}
function ClickedLessItems()
{
vm.Clear();
vm.addTask2("Dog Food4","description");
ko.applyBindings(vm);
}
所以我决定这样做并让它发挥作用:
- 按照 Tyrsius 的建议,在开头使用
ko.applyBindings(vm);。
- 创建一个清晰的函数
所以最后的代码是这样的:
var Task = function(name, description) {
this.name = ko.observable(name);
this.description = ko.observable(description);
}
var ViewModel = function() {
var self = this;
self.tasks = ko.observableArray();
self.clearTask = function(data, event) {
self.tasks.remove(data);
};
self.addTask = function() {
var task = new Task("new", "");
self.tasks.push(task);
};
self.addTask2 = function (name, description)
{
var task = new Task(name, description);
self.tasks.push(task);
}
self.Clear = function()
{
self.tasks.removeAll();
}
};
var vm = new ViewModel();
vm.addTask2("Dog Food","description");
ko.applyBindings(vm);
function ClickedMoreItems()
{
vm.Clear();
vm.addTask2("Dog Food2","description");
vm.addTask2("Dog Food3","description");
}
function ClickedLessItems()
{
vm.Clear();
vm.addTask2("Dog Food4","description");
}
你可以看到代码在运行HERE