主干表视图消耗行视图 - 如何构造?

2024-04-20

我有一组模型希望在表格视图中呈现。每个模型应由表中的一行表示,并且该行应使用模板生成。我应该能够将事件处理程序附加到该行(例如单击),在事件发生时发出有关与该行关联的模型的一些特定信息。

我见过类似的事情的一种常见方法是将每一行分解到它自己的视图中,并有一个父视图(假设在本例中是表)使用行视图生成要包含在代码中的html 。但是我无法弄清楚这如何与模板一起使用。

在这种情况下,我无法将事件专门附加到 RowView,因为它没有引用 dom 元素(this.el对于主干),它只是返回一个字符串。如何在最大程度地使用模板的同时实现我想要的目标?

这个问题并不是专门关于事件、模板或使用嵌套视图,而是更多关于使用 Backbone 实现此类输出的正确方法。

示例代码(也在fiddle http://jsfiddle.net/9avm6/4/):

/** View representing a table */
var TableView = Backbone.View.extend({
    tagName: 'table',
    render: function() {
        var rows = _.map(this.collection.models, function(p) {
            return new RowView({model: p}).render();                        
        });
        $('body').html(this.$el.html(rows.join('')));
    }
});

/** View representing a row of that table */
var RowView = Backbone.View.extend({
    render: function() {
        // imagine this is going through a template, but for now
        // lets just return straight html.
        return '<tr>' + 
                '<td>' + this.model.get('name') + '</td>' + 
                '<td>' + this.model.get('age') + '</td>' +
               '</tr>';
    }
});

var data = [
    {'name': 'Oli', 'age': 25},
    {'name': 'Sarah', 'age': 20}];

/** Collection of models to draw */
var peopleCollection = new Backbone.Collection(data);
var tableView = new TableView({collection: peopleCollection});
tableView.render();

谢谢你!


处理视图层次结构的一种方法是让每个视图渲染其子视图并将它们附加到其子视图中el。然后,每个视图根据其模型/集合来处理事件。

将 HTML 作为视图注入el从而控制容器元素,您可以使用设置元素 http://documentcloud.github.com/backbone/#View-setElement method

设置元素 view.setElement(element)

如果您想应用 Backbone 查看不同的 DOM 元素,使用 setElement,这也将 创建缓存的 $el 引用并移动视图的委托事件 从旧元素到新元素。

你的例子可以重写为

var rowTemplate=_.template("<tr>"+
     "<td class='name'><%= name %></td>"+
     "<td class='age'><%= age %></td>"+
     "</tr>");

/** View representing a table */
var TableView = Backbone.View.extend({
    tagName: 'table',

    initialize : function() {
        _.bindAll(this,'render','renderOne');
    },
    render: function() {
        this.collection.each(this.renderOne);
        return this;
    },
    renderOne : function(model) {
        var row=new RowView({model:model});
        this.$el.append(row.render().$el);
        return this;
    }
});

/** View representing a row of that table */
var RowView = Backbone.View.extend({  
    events: {
        "click .age": function() {console.log(this.model.get("name"));}
    },

    render: function() {
        var html=rowTemplate(this.model.toJSON());
        this.setElement( $(html) );
        return this;
    }
});

var data = [
    {'name': 'Oli', 'age': 25},
    {'name': 'Sarah', 'age': 20}];

/** Collection of models to draw */
var peopleCollection = new Backbone.Collection(data);
var tableView = new TableView({collection: peopleCollection});
$("body").append( tableView.render().$el );

和一把小提琴http://jsfiddle.net/9avm6/5/ http://jsfiddle.net/9avm6/5/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

主干表视图消耗行视图 - 如何构造? 的相关文章

  • 自定义 Javascript EventManager - 请帮我完成

    我正在尝试创建一个自定义 javascript EventManager 类 我采用了 Grant Skinner 在他的 essel js 框架中使用的格式来创建类 并且需要坚持使用它 在这一点上我真的迷失了 我认为 至少在概念意义上 我
  • 禁用 jquery-chosen 下拉菜单

    我有一个正在使用的选择 div选择jquery插件 http harvesthq github io chosen 设计样式并添加功能 最值得注意的是搜索 div 看起来像这样
  • jquery/javascript setInterval

    目前我正在开发一个用户通知提醒消息功能 我设法使用setInterval控制我的 Ajax 调用 检查是否有用户的通知消息 但我的问题是我只想要通知消息 在页面上出现一次 现在它在屏幕上显示多个通知警报消息 我知道你可以使用setTimeo
  • 服务器重新启动时显示等待页面

    我有一个服务器并为其创建一个 Web 界面 如果用户按下页面上的重新启动按钮 则用户将被重定向到reboot php他应该看到一个旋转 gif 直到服务器再次可访问并且服务器通过 shell 执行重新启动 如果服务器可以访问 那么我需要重定
  • jQuery-UI 的自动完成显示效果不佳,z-index 问题

    我目前正在我的客户网上商店中实现 jQuery UI 的自动完成功能 问题是 自动完成所在的元素的 z 索引高于自动完成的 z 索引 我尝试手动设置自动完成 z index 但我感觉 jQuery UI 正在覆盖它 事实上我的问题是重复的自
  • 每个对象都是一个函数,每个函数都是对象 - 哪个是正确的?

    我正在阅读这个链接JavaScript 语法 http en wikipedia org wiki JavaScript syntax 这似乎是循环的 每个函数都是一个对象 每个对象本身也是一个函数 哪个是原子的 有人可以用更好的方式解释吗
  • 在 ES6 Node.js 中导入“.json”扩展名会引发错误

    我们正在尝试使用 Node js 导出和导入 ES6 模块的新方法 对于我们来说 从package json文件 下面的代码应该做到这一点 import name version from package json 但是 执行时会抛出以下错
  • JS Facebook登录iOS8

    我的 facebook 应用程序上的登录按钮在 iOS 8 中完全停止工作 我以为这是我所做的事情 但是当我从他们的网站获取 facebook 示例 html 并将其应用到我的页面时 它仍然不起作用 我的应用程序 ID 已被替换 与 xxx
  • Leaflet.js setMaxBounds 忽略南界

    Using 传单 js http leafletjs com reference html对于开源地图项目 但我需要设置用户无法超越的特定界限 地图对象的 maxBounds 属性在北 东 西方向上按预期工作 但它让我永远向南滚动 在小提琴
  • 如何从主体上的 onClick 事件获取鼠标单击的绝对位置?

    我试图获取鼠标单击相对于浏览器 主体的绝对位置 顶部和左侧 not主体内的任何父元素 我有一个绑定到 body 的侦听器 但 e pageX 和 e pageY 为我提供了相对于 div 的位置 请注意 我可以利用 jQuery 和 YUI
  • Extjs中始终显示Slider的提示文本

    在 Extjs 4 1 1a 中 如何保持tip text滑块始终可见 目前 tip text每当用户拖动滑块栏时就可见 我搜索了docs http docs sencha com ext js 4 0 api Ext slider Sin
  • 封装的闭包与类?

    我是 JS 来自 C etc 的新手 我突然想到闭包似乎是比类更简单 更方便的处理封装的方法 这段代码似乎给出了一种处理封装的简单方法 function addProperty o var value o get function retu
  • JS 是否支持使用键函数而不是比较器进行排序?

    JavaScript 的array sort https developer mozilla org en US docs Web JavaScript Reference Global Objects Array sort Syntax方
  • 在 JavaScript 中给变量字符串加上引号

    我有一个 JavaScript 变量 var text http example com 文本可以是多个链接 如何在变量字符串周围放置 例如 我希望字符串看起来像这样 http example com var text http examp
  • JavaScript 排序列表

    Javascript 或 jQuery 中有排序列表吗 我有一个巨大的列表 随着时间的推移 插入操作很少 每次添加单个项目时 我无法为整个列表调用 object sort 我需要插入 o log n 不 没有 你拥有的只是Array sor
  • 删除鼠标悬停时的 Vue 自定义过滤器

    我想使用 VueJS 2 删除鼠标悬停时的截断过滤器 这是模板中的过滤器 div class eng word english truncate div 这是过滤器本身 filters truncate function value let
  • 在画布中的鼠标位置放大/缩小

    我正在尝试使用 p5 js 实现缩放功能 当前缩放级别以及 x 和 y 位置存储在controls view目的 默认位置或 0 0 位置位于左上角 问题是调整放大 缩小时的 x 和 y 位置值 以便无论视图的当前位置是什么 它都会停留在缩
  • 脚本和链接标签的简写 http:// 为 // ?有人以前看过/用过这个吗?

    问题如下 如果您使用 addthis 共享按钮 查看任何网站 一旦您浮动在 addthis 按钮上 并且加载了所有必需的资源 请使用 firebug 或 chrome 检查器查看文档的正文 不是源代码 而是屏幕上的实际文档 对象检查器 你会
  • 反应本机中的“未知命名模块”错误

    我正在使用 React Native 创建一个应用程序 但某些导入会引发标题中的错误 Unknown named module 两个包都会发生这种情况 react native material design and react nativ
  • JavaScript 有内置的 stringbuilder 类吗?

    I see a few 代码项目解决方案 http www codeproject com KB scripting stringbuilder aspx 但是JavaScript中有常规的实现吗 如果您必须为 Internet Explo

随机推荐

  • 从 U-SQL 表加载数据时优化器内部错误

    有没有办法解决这个错误 CQO 内部错误 优化器内部错误 断言 a drgcidChild gt CLength UlSafeCLength popMS gt Pdrgcid 在 rlstreamset cpp 499 从分区 U SQL
  • 如何在输入对话框中预设光标或选择默认答案

    如果创建一个输入对话框inputdlg和默认答案 看起来像这样 我需要哪个回调命令才能使它看起来像那样 这里缺少很多文档 这是为客户提供的一种 豪华服务 但我认为如果它很容易实现的话那就太好了 这个问题实际上已经解决了 因为我发现有一些方便
  • 从 TinyMCE 对话框中获取输入字段值

    all 我很难弄清楚这一点 这是我第二次需要用tinyMCE做一些事情 但这次我找不到答案 这就是我想要做的 我在编辑器上添加了一个按钮 用于打开一个带有单个文本输入字段和一个按钮的新弹出窗口 我想单击按钮并获取在输入字段中设置的值 然后使
  • 使用 和指令重新排序进行基准测试

    到目前为止 我一直在使用传统方法来对并发方法进行基准测试 即测量多次运行的持续时间 template
  • MinGW 作为可靠的 64 位 GCC 编译器

    我担心 64 位 MinGW 编译器作为 Visual C 编译器的替代品的可靠性 例如 假设 C 代码使用 GCC 4 6 2 在 Linux 下完美构建和运行 相应的 MinGW 是否会在 64 位 Windows 下生成类似可靠的可执
  • Java 从基本构造函数调用基本方法

    如何从 Super Super 调用 Super printThree 在下面的示例中 我改为调用 Test printThree class Super Super printThree I want Super printThree h
  • 在 Swift 4 中,扩展声明还不能被覆盖

    我最近将我的代码迁移到Swift 4 我面临一个问题扩展 i e 扩展的声明还不能被覆盖 我已经阅读了多篇重新评估此问题的帖子 但他们都不接受下面描述的场景 class BaseCell UITableViewCell Some code
  • 在 Perl 中如何计算给定正态分布的点的概率?

    Perl 中是否有一个包可以让您计算每个给定点的概率分布高度 例如 这可以在 R 中以这种方式完成 gt dnorm 0 mean 4 sd 10 gt 0 03682701 即x 0点服从正态分布 mean 4 sd 10的概率为0 03
  • Twitter Bootstrap:Affix 在单页应用程序中未触发

    我正在做一个单页应用程序并使用 Twitter Bootstrap 我尝试像这样使用 Affix div 当我刷新页面时 一切正常 引导程序词缀添加了一个类 如下所示 div class affix top 当我超过 100px 后 它会将
  • 使用欧几里德算法计算数组值的最小公倍数

    我想使用欧几里德算法计算值数组的最小公倍数 我正在使用这个伪代码实现 发现于维基百科 https en wikipedia org wiki Euclidean algorithm function gcd a b while b 0 t
  • FTP 二进制 x ASCII 自动选择

    我编写了一个 FTP 插件 使用 python 的 ftplib 我想知道确定给定文件是否应该使用二进制或 ASCII 传输方法的最佳方法是什么 换句话说 自动 传输模式 当我收到有关双线的问题报告时 我开始研究这个问题 并且谷歌搜索发现二
  • 让回调在 JavaScript 中同步工作

    我正在使用一个名为DSBridge https github com wendux DSBridge IOS将移动应用程序 在本例中为 iOS 代码 连接到包含我的应用程序主要逻辑的 javascript 代码 这涉及在不可见的 WKWeb
  • Apache 服务器(xampp)在使用 openssl 函数时崩溃

    我正在尝试使用 php ini 生成私钥 公钥对 服务器 Apache 2 4 3 Win32 OpenSSL 1 0 1c PHP 5 4 7 操作系统是 Windows XP SP3 安装了所有 Windows 更新 我正在尝试执行以下
  • 如何使用 C# 访问 SQLite?

    我正在尝试使用 C ASP NET 以编程方式连接到我的 Sqlite 数据库 string requete sql SELECT FROM USERS connStr Data Source C LocalFolder FooBar db
  • 马根托。将块插入另一个块而不更改模板代码

    我尝试寻找解决方案但没有结果 我的任务是编写模块 它应该将一些 html 插入现有块中 我注意到 当我使用布局 xml 文件时 我可以将我的块插入到一些参考中 例如
  • 无法让简单的 ParseKit 示例正常工作

    我刚刚发现 ParseKit 但似乎无法让它在一个简单的例子中工作 NSString test FOO BAR NSString grammar get grammar txt file and read it into a string
  • AngularJS - 外部模板

    我正在为 和 的每个内容制作一个模板 因为我有很多数据要显示 但都在相同的结构中 这里是index html div 这是 script js function Ctrl scope scope methods name method1 d
  • Windows 11 权限被拒绝(公钥)

    最近升级到 Windows 11 后 我无法通过 SSH 访问服务器 我不断收到permission denied publickey error 我尝试过重新生成新的公钥ed25519而不是已弃用的rsa我仍然遇到同样的错误 我已经看到了
  • 2D 弹跳公式无法正常工作

    我是 Unity 的新手 我正在尝试创建一个弹跳球 所以我做了很多关于弹跳相关物理的研究 我找到了一个公式 Formula 2 V dot N N V 其中 V 是速度矢量 N 是球弹跳表面的法线 这是我的脚本 using UnityEng
  • 主干表视图消耗行视图 - 如何构造?

    我有一组模型希望在表格视图中呈现 每个模型应由表中的一行表示 并且该行应使用模板生成 我应该能够将事件处理程序附加到该行 例如单击 在事件发生时发出有关与该行关联的模型的一些特定信息 我见过类似的事情的一种常见方法是将每一行分解到它自己的视