一个视图连接到多个模型

2024-03-01

我有以下问题...

MyView它连接到两个视图:TaskModel and UserModel

TaskModel = {id: 1, taskName: "myTask", creatorName: "myName", creator_id: 2 },
UserModel = {id: 2, avatar: "someAvatar"}

视图应该显示

{{taskName}}, {{creatorName}}, {{someAvatar}}

正如你所看到的TaskModel and UserModel应该是同步的,因为userModel.fetch的需要taskModel.get("creator_id")

您建议我使用哪种方法来显示/处理视图和两个模型?


您可以使视图足够智能,以便在拥有所需的一切之前不进行渲染。

假设您有一个用户和一个任务,并将它们都传递给视图的构造函数:

initialize: function(user, task) {
    _.bindAll(this, 'render');
    this.user = user;
    this.task = task;
    this.user.on('change', this.render);
    this.task.on('change', this.render);
}

现在您有一个视图,该视图引用了用户和任务,并且正在侦听"change"两者上的事件。然后,render方法可以询问模型是否拥有应有的一切,例如:

render: function() {
    if(this.user.has('name')
    && this.task.has('name')) {
        this.$el.append(this.template({
            task: this.task.toJSON(),
            user: this.user.toJSON()
        }));
    }
    return this;​​​​
}

So render将等到两个this.user and this.task在填充正确的 HTML 之前已完全加载;如果在加载模型之前调用它,则它不会渲染任何内容并返回一个空占位符。这种方法将视图的所有逻辑很好地隐藏在它所属的视图内,并且很容易泛化。

Demo: http://jsfiddle.net/ambiguously/rreu5jd8/ http://jsfiddle.net/ambiguous/rreu5jd8/


您还可以使用下划线isEmpty http://underscorejs.org/#isEmpty(这是混合到 Backbone 模型中 http://backbonejs.org/#Model-Underscore-Methods) 而不是检查特定属性:

render: function() {
    if(!this.user.isEmpty()
    && !this.task.isEmpty()) {
        this.$el.append(this.template({
            task: this.task.toJSON(),
            user: this.user.toJSON()
        }));
    }
    return this;​​​​
}

当然,这是假设您没有任何默认值。

Demo: http://jsfiddle.net/ambiguously/4q07budc/ http://jsfiddle.net/ambiguous/4q07budc/

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

一个视图连接到多个模型 的相关文章

  • “FormData”仅在 IE 中未定义

    我有一个问题 我需要将数据发布为内容类型application x www form urlencoded var inputData cId 444 pageNo 1 latitude 49 153236 longitude 12 040
  • Backbone.js 和 Rails - 如何处理来自 Backbone 模型的参数?

    在标准 Rails 控制器中 我将创建如下记录 user User new params user 这假设传入的表单参数是嵌套的 我一直在使用 Backbone js 我注意到默认情况下 Backbone 不会像普通 Rails 表单那样嵌
  • Backbone.js 控制器中的默认路由?

    我想为我的backbone js 控制器设置默认路由 目前我是这样做的 class DealSearchController extends Backbone Controller routes list showListView phot
  • JavaScript 错误:“不是构造函数”

    我使用backbone js以及jquery和underscore js 这是我的一些代码 它还没有做任何事情 奇怪的是 点击 url users 后没有错误 发生错误的唯一一次是当我单击转到不同的哈希 然后单击返回转到 users 时 这
  • Backbone - 从 API 获取 JSON 数据

    这几天我在玩Backbone 我想从 Twitter 搜索 API 接收一些数据 但我真的不明白它是如何工作的 这是我的代码 function Tweet Backbone Model extend Tweets Backbone Coll
  • 在Javascript中,这个下划线是什么意思?

    var Gallery Backbone Controller extend index null photos null album null subalbums null subphotos null data null photosv
  • 使用 $(function 等启动 javascript 代码

    我正在研究 Backbone 和来自的待办事项示例应用程序http todomvc com http todomvc com 我注意到有 3 种方法可以在文件中启动代码 function code here function code he
  • 在骨干模型上声明变量而不设置默认值

    我刚刚开始使用backbone js 我正在寻找一种在模型上声明字段而无需提供默认值的方法 它实际上仅供参考 以便当我开始创建实例时 我可以看到需要初始化哪些字段 用java之类的东西我会写 public class CartLine St
  • 如何将查询字符串传递给backbone.js 路由

    我正在使用 Backbone js 和 jQuery mobile jQuery 移动路由被禁用 我仅将库用于 UI 除了选择页面转换之外 我一切正常 我需要将页面转换 向上切片 淡入淡出 向下滑动 传递到主干路由器 因为转换根据用户来自的
  • 避免从主干视图重新渲染图像和其他内容

    当我重新渲染主干视图时 有什么好方法可以跳过重新渲染图像和谷歌地图等内容 每次重新渲染视图时 我的照片和地图视图都会闪烁得很厉害 这种情况很常见 特别是对于图像 模板引擎从头开始布局布局 这会导致图像标记再次从服务器或从缓存中获取位图 当然
  • 主干表视图消耗行视图 - 如何构造?

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

    我正在尝试创建一个基于 Twitter 引导模式的 Backbone js 视图 该视图通过以下方式使用 Backbone 的自动事件委托 events视图的属性 不幸的是 bootstrap modal 似乎破坏了 Backbone 的事
  • 使用主干渲染引导模式

    我认为代码可以更好地解释我的问题 风景 App Views ErrorModal Backbone View extend template window template errorModal render function this e
  • 使用 Rivets.js 迭代 Backbone.js 模型的集合?

    我在用着铆钉 js http rivetsjs com 对于 Backbone 项目中的两个双向数据绑定 并且希望实现迭代绑定 文档表明迭代绑定是可能的 但没有可用的示例 我正在使用一个简单的 Rails API 将 JSON 发送到客户端
  • Backbone.js 和层次结构/树

    我正在开发一个应用程序 该应用程序需要一个表单 允许用户管理任意深度的产品类别层次结构 我可以很容易地将数据加载到页面上 但我有点不知道需要做什么才能使这样的东西与backbone js一起工作 基本上 我正在寻找嵌套的 UL 当用户选择一
  • 渐进增强 - Node.js、Backbone.js

    Node js 服务器有两个角色 前缀为 api 的路由上的 RESTFul API 在其他路线上呈现网站页面 plans features terms 目前 我的所有页面都会呈现一个 正在加载页面 并与 Backbone router 启
  • Marionette.View 中 UI 元素的可用性

    我只是想了解 Backbone Marionette 关于 UI 元素的观点背后的决定 在现有 DOM 元素上实例化 Marionette View 时 如下所示 view new Marionette ItemView el elemen
  • 如何在执行路由方法之前运行“中间件”函数?

    假设我有一个主干路由器 例如 routes homepage catalog id catalogPage catalog id products id2 productPage homepage gt doStuff catalogPag
  • 如何定义与 Backbone 一起使用的 jade 模板

    我需要使用模板来渲染每个 ItemView var ItemView Backbone View extend className item template template itemTemplate html initialize fu
  • 主干关系有许多最佳实践

    我是 Backbone 关系新手 我不确定使用 HasMany 的正确方法是什么 我有一个Parent模型有很多children 许多 是指成千上万的孩子 为了避免性能问题 我通过外键查询子项 child parent 1 而不是创建一个巨

随机推荐