Estoy usando knockoutjs para crear una vista en árbol de las divisiones. Junto a cada nodo habrá tres botones: 1) Nuevo elemento secundario (se aplica al nodo que está junto a 2) Eliminar (Esto elimina el nodo que está junto a, y 3) Copiar, que copia el nodo y todos sus elementos secundarios y crea un nuevo nodo debajo del padre.Quitar el yo de Observable Array en el knockout JS
Tengo el botón Nuevo presionado, y ahora estoy trabajando en el botón Eliminar. Parece que no puedo hacer que funcione, y en lugar de hacer algo útil, simplemente refresca toda la página. Aquí está el código:
Vista:
<h2>Skill & Weight Divisions</h2>
<span data-bind="text: tournamentname"></span><button data-bind="click: addDivision"><img src="new.png"/></button>
<ul data-bind="template: { name: 'divisionTemplate', foreach: divisions }"></ul>
Plantilla:
<script id="divisionTemplate" type="text/html">
<li data-bind="style: {'background-color':color}">
<input data-bind="value: name"/><button data-bind="click: addDivision"><img src="new.png"/></button><button data-bind="click: $parent.removeDivision"><img src="remove.png"/></button><button data-bind="click: $parent.copyDivision"><img src="copy.png"/></button>
<ul data-bind="template: { 'if': children, name: 'divisionTemplate', foreach: children }"></ul>
</li>
</script>
Vista del modelo y de la función de ayuda apropiado:
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 = '<span style="text-align:center;padding:10px;"><h1>'+self.tournamentname()+'</h1><img src="'+self.image()+'"/><br/>';
flyerHTML += 'District: ' + self.district().districtName + ' Region: ' + self.region().regionName+'<br><br>';
flyerHTML += '<h2>WHEN: '+self.eventdate()+' '+self.startTime()+'</h2>';
flyerHTML += '<h2>WHERE: '+self.location()+'</h2>';
flyerHTML += '<img src="http://maps.googleapis.com/maps/api/staticmap?center='+encodeURI(self.location())+'&zoom=12&size=200x200&markers=color:blue%7Clabel:S%7C'+encodeURI(self.location())+'&maptype=roadmap&sensor=false"/>';
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());
Mi pregunta principal en todo esto es la siguiente: ¿Hay alguna manera de acceder a la matriz principal de un objeto para eliminar ese mismo objeto de la matriz? Gracias de antemano por la ayuda!
EDITAR: Aquí hay un jsFiddle: http://jsfiddle.net/eqY7Z/ Sin embargo, parece que no funciona en absoluto. Si ustedes no pueden hacerlo funcionar, incluiré el enlace a mi sitio donde se está alojado para que puedan echarle un buen vistazo.
También me gustaría añadir que en algún momento obtuve la eliminación trabajando, pero solo dos niveles más abajo. Algo más profundo no funcionó.Si puedo recordar el código que funcionó allí, te lo haré saber. –
¿Puedes crear un jsfiddle para esto? – HashCoder
Tengo que ir a trabajar ahora, pero en mi descanso voy a poner uno. –