Я использую Knockoutjs для создания древовидного представления подразделений. Рядом с каждым узлом будет три кнопки :1 )Новый дочерний элемент (применяется к узлу, к которому он примыкает 2 )Удалить (Это удаляет узел, к которому он примыкает, и 3 )Копировать, который копирует узел и все его дочерние элементы и создает новый узел под родителем.
У меня нажата кнопка «Новый», и теперь я работаю над кнопкой «Удалить». Кажется, я не могу заставить его работать, и вместо того, чтобы делать что-то полезное, он просто обновляет всю страницу. Вот код:
Посмотреть:
Skill & Weight Divisions
Шаблон:
Модель просмотра и соответствующая вспомогательная функция:
function division(id, name, filter, children) {
this.id = ko.observable(id);
this.name = ko.observable(name);
this.filter = ko.observable(filter)
if(children){
this.children = ko.observableArray(children);
}else{
this.children = ko.observableArray();
}
this.addDivision = function(){
this.children.push(new division("", "", ""));
}
this.removeDivision = function(division){
this.children.remove(division);
}
this.copyDivision = function(division){
this.children.push(division);
}
this.color = randColor();
};
function tournamentViewModel(){
var self= this;
self.tournamentname = ko.observable('NO NAME YET');
self.districts = ko.observableArray([new district('Provo',1),new district('Salt Lake City',2),new district('St. George',3)]);
self.district = ko.observable(self.districts()[0]);
self.regions = ko.observableArray([new region('Utah',1),new region('Idaho',2)]);
self.region = ko.observable(self.regions()[0]);
self.location = ko.observable('WHEREVER YOU WANT');
self.eventdate = ko.observable('');
self.startTime = ko.observable('');
self.image = ko.observable();
self.flyer = ko.computed(function(){
var flyerHTML = ''+self.tournamentname()+'
';
flyerHTML += 'District: ' + self.district().districtName + ' Region: ' + self.region().regionName+'
';
flyerHTML += 'WHEN: '+self.eventdate()+' '+self.startTime()+'
';
flyerHTML += 'WHERE: '+self.location()+'
';
flyerHTML += '';
return flyerHTML;
}, self);
self.clearImage = function(){
self.image('');
}
self.tournamentID = ko.computed(function(){return 't_'+self.district()+'_'+self.region()+'_'+self.eventdate()}, self);
self.pricingStructures = ko.observableArray([new pricingStructure(3,2.99), new pricingStructure(1,1.99)]);
self.removePricingStructure = function(pricingStructure){
self.pricingStructures.remove(pricingStructure);
}
self.addPricingStructure = function(){
self.pricingStructures.push(new pricingStructure("", ""));
}
self.promoCodes = ko.observableArray();
self.promoTypes = ['%','$'];
self.removePromoCode = function(promoCode){
self.promoCodes.remove(promoCode);
}
self.addPromoCode = function(){
self.promoCodes.push(new promoCode("", ""));
}
self.divisions = ko.observableArray([new division(1, "Men","",[new division(2,"Gi"), new division(3,"No-Gi")])]);
self.addDivision = function(){
self.divisions.push(new division("", "", ""));
}
}
ko.applyBindings(new tournamentViewModel());
Мой главный вопрос во всем этом заключается в следующем :Есть ли способ получить доступ к родительскому массиву объекта, чтобы удалить этот самый объект из массива? Заранее спасибо за помощь!
РЕДАКТИРОВАТЬ :Вот jsFiddle:http://jsfiddle.net/eqY7Z/Однако, похоже, он там вообще не работает. Если вы, ребята, не можете это сделать, я включу ссылку на мой сайт, где он размещен, чтобы вы могли его хорошенько изучить.