Jquery 从Ul主干中删除li
我试图建立一个非常简单的ul,其中有一个输入框和添加按钮,单击添加按钮,输入的文本将附加到ul 这是我的代码: HTML:Jquery 从Ul主干中删除li,jquery,backbone.js,underscore.js,Jquery,Backbone.js,Underscore.js,我试图建立一个非常简单的ul,其中有一个输入框和添加按钮,单击添加按钮,输入的文本将附加到ul 这是我的代码: HTML: <body> <input type="text" id="name"> <button id="add">Add</button> <ul id="mylist"></ul> JS: 我的“添加”功能正在运行,但当我单击“删除”按钮(应从集合中删除哪个模型)时,我卡在那里,请帮助我解决问题。只需要代
<body>
<input type="text" id="name">
<button id="add">Add</button>
<ul id="mylist"></ul>
JS:
我的“添加”功能正在运行,但当我单击“删除”按钮(应从集合中删除哪个模型)时,我卡在那里,请帮助我解决问题。只需要代码,了解如何在removefoo功能中从集合中删除
换句话说,单击按钮时,如何获取要删除的模型
谢谢在UI上呈现每个模型时,必须为每个元素分配一个唯一的id,以了解删除了哪个元素 而不是
$('#mylist').append('<li>'+model.get('name') + "<button class='button'>"+"delete"+"</button></li>");
请参阅以了解主干网的所有组件是如何组合在一起的。在UI上呈现每个模型时,必须为每个元素分配一个唯一的id,以了解哪个元素被删除 而不是
$('#mylist').append('<li>'+model.get('name') + "<button class='button'>"+"delete"+"</button></li>");
请参阅以了解主干网的所有组件是如何组合在一起的。我认为您需要一种更模块化的主干网方法,让我解释一下 主干是组织代码的一种方式。只有一个主干视图就可以完成所有任务,不会有太大变化 相反,尝试查看您实际需要的视图: 主视图 列表视图 ListItemView MainView可能如下所示:
var MainView = Backbone.View.extend({
el: 'body',
initialize : function(options) {
this.collection = new Backbone.Collection.extend({ url: '/items' });
},
events:{
},
render:function(){
var listView = new ListView({ el: this.$("#myList") });
listView.render();
this.collection.fetch();
return this;
}
});
列表视图
ListItemView
启动主视图:var view=new MainView.render 我想您需要一种更模块化的主干方法,让我解释一下 主干是组织代码的一种方式。只有一个主干视图就可以完成所有任务,不会有太大变化 相反,尝试查看您实际需要的视图: 主视图 列表视图 ListItemView MainView可能如下所示:
var MainView = Backbone.View.extend({
el: 'body',
initialize : function(options) {
this.collection = new Backbone.Collection.extend({ url: '/items' });
},
events:{
},
render:function(){
var listView = new ListView({ el: this.$("#myList") });
listView.render();
this.collection.fetch();
return this;
}
});
列表视图
ListItemView
启动主视图:var view=new MainView.render 嗯,谢谢你的回复,但是当我做你的方法时,事件给我:+delete+而不是model idies,要获得模型id,你必须在li id中分配并合并模型id。可能是这样的,其中1是模型id。处理这个问题的标准方法是使用1:1视图:模型关系,每个视图管理一个DOM元素及其子元素。这就是@MartinHN的答案的本质。如果您需要维护内部模型元素映射,则可能需要子视图。这取决于您的情况—可能是许多DOM元素的问题。但在正常情况下,它不会以任何有意义的方式影响内存或性能。优点在于通过视图中的引用来维护模型、视图和DOM之间的关联,而不必查询DOM来获取元素。它更干净、更易于维护,而且速度更快,因为您不需要每次都进行查询。嗯,谢谢您的回复,但当我处理您的问题时,请给我:+delete+而不是model idies,以获取模型id,您必须在li id中指定并合并模型id。这可能类似于其中1是模型id。处理这一问题的标准方法是使用1:1视图:模型关系,每个视图管理一个DOM元素及其子元素。这就是@MartinHN的答案的本质。如果您需要维护内部模型元素映射,则可能需要子视图。这取决于您的情况—可能是许多DOM元素的问题。但在正常情况下,它不会以任何有意义的方式影响内存或性能。优点在于通过视图中的引用来维护模型、视图和DOM之间的关联,而不必查询DOM来获取元素。它更干净、更易于维护,而且速度更快,因为您不需要每次都进行查询。谢谢您的回复,但我是主干网新手,我真的无法消化这么多代码,恕我冒犯,但您能帮我做些更清晰的事情吗?试着看看TodoMVC:,it的主干版本:-消费和了解全局需要一些时间,但要编写可维护的主干应用程序,重要的是要正确理解概念。您的代码的问题是,它没有真正利用主干提供的所有优点。ListView应该是this.collection=options.collection;自动,渲染可能应该是this.collection.eachthis.appendListItem,这是为了完整性。@muistooshort我实际上不知道视图会在initialize方法中自动处理集合。@muistooshort,martinHN I在上面发布了一个类似的问题,那么,你能告诉我答案是否是utiliza the Goods of Branch吗,请非常感谢您的回复,但我是主干网新手,我真的无法消化这么多代码,恕我冒犯,但您能帮我做些更清晰的事情吗?试着看看TodoMVC:,以及它的主干网版本:-这将需要一些时间来消费和了解全局,但要编写可维护的主干应用程序,重要的是要正确理解概念。代码的问题是
,它没有真正利用主干提供的所有优点。ListView应该是this.collection=options.collection;自动,渲染可能应该是this.collection.eachthis.appendListItem,这是为了完整性。@muistooshort我实际上不知道视图会在initialize方法中自动处理集合。@muistooshort,martinHN I在上面发布了一个类似的问题,那么,你能告诉我答案是否是utiliza the Goods of Branch吗,请多谢各位
var ListView = Backbone.View.extend({
tagName: 'ul',
initialize : function(options) {
_.bindAll(this, "render");
this.collection.on("add", this.appendListItem, this);
},
events:{
},
render: function() {
this.collection.each(this.appendListItem, this);
return this;
},
appendListItem: function (model, collection, options) {
var listItem = new ListItemView({ model: model});
this.$el.append(listItem.render().el);
}
});
var ListItemView = Backbone.View.extend({
tagName: 'li',
initialize : function(options) {
_.bindAll(this, "render");
this.model.on("destroy", this.remove, this);
},
events:{
"click button": "delete"
},
render:function(){
this.$el.text(this.model.get('name'));
this.$el.append("<button class='button'>Delete</button>");
return this;
},
delete: function (event) {
this.model.destroy();
}
});