Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 从Ul主干中删除li_Jquery_Backbone.js_Underscore.js - Fatal编程技术网

Jquery 从Ul主干中删除li

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: 我的“添加”功能正在运行,但当我单击“删除”按钮(应从集合中删除哪个模型)时,我卡在那里,请帮助我解决问题。只需要代

我试图建立一个非常简单的ul,其中有一个输入框和添加按钮,单击添加按钮,输入的文本将附加到ul

这是我的代码:

HTML:

<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();
    }
});