【问题标题】:Backbonejs: get clicked model from collectionBackbonejs:从集合中获取点击模型
【发布时间】:2014-02-17 07:07:43
【问题描述】:
define(['jquery', 'underscore', 'backbone', 'text!views/manageUsers.tpl', 'common'], function($, _, Backbone, tmpl_manageUsersView, ajax) {

/*
 *    Module list
 *
 *    tmpl_page1View      templates/tmpl_page1View.html
 */

var manageUsersView = Backbone.View.extend({
    // Setting the view's template property using the Underscore template method        
    template: _.template(tmpl_manageUsersView),
    // View constructor
    initialize: function() {
        self = this;
    },
    // View Event Handlers
    events: {

    },
    // Renders the view's template to the UI
    render: function() {
        this.$el.html(this.template({data: this.templateData}));
        user=Backbone.Model.extend({
            defaults:{
                name:"",
                password:"",
                isAdmin:false
            },

        });
        users=Backbone.Collection.extend({
            model:user,
            url:"auth"
        });

        usersCollection=new users();
        usersCollection.fetch({
            error:function(response,xhr){
                console.log(response);
            },
            success:function(response){
                        count=1;
                _.each(data,function(d){
                    if(count%2==0)
                        $("#users>tbody").append("<tr class='odd'><td>"+count+"</td><td>"+d.username+"</td><td><a href='#' class='edit-iocn' id='edit_"+d.username+"' ></a><a class='ancrul delete-icon' id='delete_"+d.username+"'></a></td>");
                    else
                        $("#users>tbody").append("<tr class='even'><td>"+count+"</td><td>"+d.username+"</td><td><a href='#' class='edit-iocn' id='edit_"+d.username+"'></a><a class='ancrul delete-icon' id='delete_"+d.username+"'></a></td>");
                    count++;
                });
                /*--*/

                var oTable = $('#users').dataTable({
                    "sDom": '<"bottom"<i>rtp<"clear">',
                    //"sDom":'<"top"ip>rt<"bottom"ip<"clear">',

                    "sPaginationType": "full_numbers",
                    "bLengthChange": true,
                    "bPaginate": true,
                    "bInfo": true,
                    //"bAutoWidth": true,
                    "iDisplayLength":5,
                    "oLanguage": {
                        "sInfo": "",
                        "sInfoEmpty": ""
                    },
                    });

            }
        });

});
return manageUsersView;
});

以上是我从 url 获取数据的代码。

在 manageUsers.tpl 文件之后。

<div class="content">
<p> </p>
<h3></h3>
<div class="admin-login-area ui-corner-all">
    <p class="validateTips">All form fields are required.</p>
    <form id="addUserForm">
        <fieldset>
        <label for="name" class="login-label">User Name</label>
        <input type="text" name="u-name" id="u-name" class="text ui-widget-content ui-corner-all">
        <label for="name" class="login-label">Password</label>
        <input type="password" name="p-name" id="p-name" class="text ui-widget-content ui-corner-all">
        <label for="email" class="login-label">Retype Password</label>
        <input type="password" class="text ui-widget-content ui-corner-all" id="c-name" name="c-name">
        <input type="checkbox" id="isAdmin" />
        <label>Is Admin</label>
        <label class="login-label"></label>
        <br/>
        <input type="button" name="submit" id="submit" value="Submit" class="submit-btn">
        <input type="button" name="submit" id="reset" value="Reset" class="submit-btn">
        <input type="button" name="submit" id="cancel" value="Cancel" class="submit-btn">
        <label class="login-label"></label>         
      </fieldset>
      </form>

<!-- end admin login --></div>
<div class="table" >

  <table width="100%" cellspacing="0" cellpadding="0" border="0"  id="users">
  <thead>

            <th>Sr No</th>
            <th>users</th>
            <th>Actions</th>

            </thead>
            <tfoot style="display: table-header-group;">
                <tr>
                    <th></th>
                    <th></th>
                    <th></th>

                </tr>
            </tfoot>
            <tbody>

            </tbody>
        </table>

  </div>

在成功获取数据时,我已经用 collectios 的数据填充了表格,点击表格中的一个项目我想检索整个模型。我在同一个 tpl 文件中有表格和表格

如何使用backbonejs和下划线js来做到这一点?

【问题讨论】:

  • 请查看Backbone.js 的文档,我认为backbonejs.org/#Collection-fetch 链接将回答您关于如何在收集时调用 fetch 的问题
  • 我已经完成了它,我在 fetch 调用成功时得到了响应,但问题是我不知道如何使用这个集合填充表格以及点击表格中的项目如何获得点击模型?
  • 您必须构建一个视图并将集合传递给该视图,然后根据您的集合填充该视图

标签: backbone.js underscore.js backbone.js-collections


【解决方案1】:

首先,将此事件添加到您的视图中:

events : {
    'click .edit-iocn' : 'edit', // in your code you typed `iocn` instead of `icon`
    'click .delete-icon' : 'delete'
}

将 id 更改为 id='"+d.username+"' 而不使用 edit_ 和 delete_

最后是编辑和删除方法:

edit: function(event) {
    var username = event.currentTarget.id;

    var user = usersCollection.where({name: username})[0];
    ...
}

delete: function(event) {
    var username = event.currentTarget.id;

    var user = usersCollection.where({name: username})[0];
    ...
}

【讨论】:

  • 好的,我已经更正了,然后点击项目如何获得整个模型?
  • 一旦你有了username,你就可以搜索你的收藏:usersCollection.where({name: username});我不确定您是在模型中使用名称还是用户名。
  • 得到了 d 模型,但它进入了 0: r _changing: false _events: Object _pending: false _previousAttributes: Object attributes: Object changed: Object cid: "c2" collection: r proto: s 构造函数: function (){return i.apply(this,arguments)} 默认值: Object proto: Object length: 1 proto: Array[0]这种格式如何从中获取用户名idAdmin和密码?
  • 我忘了告诉你usersCollection.where()返回一个模型数组,所以你必须这样做usersCollection.where({name: username})[0]
  • var user = usersCollection.where({name: username})[0]; user.get('密码')
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2013-02-09
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多