これが誰かの助けになることを願っています.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」が 2 回複製されました。
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);
}
だから私はこれを行うことに決めました。
ko.applyBindings(vm);
Tyrsius が推奨するように、開始時にのみ使用してください。
- 明確な機能を作成する
したがって、最終的なコードは次のとおりです。
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");
}
ここで実際のコードを見ることができます