首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone.View没有响应Backbone.UI

Backbone.View没有响应Backbone.UI
EN

Stack Overflow用户
提问于 2015-03-10 21:36:20
回答 2查看 64关注 0票数 0

我正在构建一个小程序来显示一群人的一些细节。有一个选项可以更新细节。但是,视图没有呈现更新:

这是我的server.js:

代码语言:javascript
复制
var express= require("express"),
bodyparser= require("body-parser");

var app= express();

app.use(express.static(__dirname+ "/public"));
app.use(bodyparser.json());

app.get("/", function(req, res){
    res.render("index.jade");
});

app.listen(3002);

我的index.jade是:

代码语言:javascript
复制
doctype html

link(rel="stylesheet", href="backbui.css")

#main

script(src= "jquery.js")
script(src= "underscore.js")
script(src= "backbone.js")
script(src= "laconic.js")
script(src= "moment.js")
script(src= "backbui.js")
script(src= "theapp.js")

我的theapp.js文件是:

代码语言:javascript
复制
var Person= Backbone.Model.extend({}),
People= Backbone.Collection.extend({});

var Genders= new Backbone.Collection(
        [
             {name: "Female", id: 1},
             {name: "Male", id: 0}
]);

var people= new People([
            {name: "John Doe", gender: Genders.get(0), birthday:
             new Date(1990, 5, 15), married: false},
            {name: "Jane Smith", gender: Genders.get(1), birthday:
             new Date(1985, 10, 10), married: true},
            {name: "Tom Smith", gender: Genders.get(0), birthday: 
             new Date(1980, 1, 20), married: true},
            {name: "Sally Fox", gender: Genders.get(1), birthday: 
             new Date(1998, 7, 31), married: false}
]);

var table= new Backbone.UI.TableView({
    model: people,  // collection can also be passed
    columns: [
        {title: "Name", content: "name"},
        {title: "Gender", content: "gender", 
         format: function(model){ return model.get("name"); }},
        {title: "Birthday", content: "birthday",
         format: function(date){ return date.toString(); }},
        {title: "Married", content: "married",
         format: function(married){ return married? "yes": "no"; }}
    ]
}); 

var sally= people.models[3];

var textbox= new Backbone.UI.TextField({
    model: sally,
    content: "name",
});

var radios= new Backbone.UI.RadioGroup({
    model: sally,
    content: "gender",
    alternatives: Genders,
    altLabelContent: "name",
});

var Appview= Backbone.View.extend({
    el: "#main",

    render: function(){
            this.$el.append(table.render().el);
            this.$el.append(textbox.render().el);
            this.$el.append(radios.render().el);
            return this;
    }
});

new Appview().render();

我想看到表中第四个名字的实时更新。当我在文本框区域做更改时,萨利·福克斯。同样,当我在单选按钮中做改变时,我也希望看到莎莉·福克斯的桌子性别发生变化。

基本上,我希望我的Backbone.TableView能够听到其他Backbone.UI小部件如Backbone.UI.RadioGroup和Backbone.UI.TextField中所做的更改。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-11 13:06:58

你走在正确的道路上。在视图中添加侦听器,以便在people集合发生更改时侦听。对单个模型的更改(即sally)也会在集合中出现气泡。

我对Backbone.UI并不太熟悉,但这些变化可能如下所示:

代码语言:javascript
复制
// Make the table listen to changes in the passed-in collection & re-render
// when needed
var table= new Backbone.UI.TableView({
    model: people,  // collection can also be passed
    columns: [
        {title: "Name", content: "name"},
        {title: "Gender", content: "gender", 
         format: function(model){ return model.get("name"); }},
        {title: "Birthday", content: "birthday",
         format: function(date){ return date.toString(); }},
        {title: "Married", content: "married",
         format: function(married){ return married? "yes": "no"; }}
    ],

    initialize: function() {
        // When a change event happens to the model/collection, re-render
        this.listenTo(model, 'change', this.render);
    }
}); 

对于想要对数据更改作出反应的其他视图,您将做类似的事情。关键是让视图共享您正在更改的模型/集合的同一个实例,然后侦听特定的更改。

如果这不能让您开始工作,那么发布评论和/或JSFiddle,我们就可以这样取得进展。

票数 1
EN

Stack Overflow用户

发布于 2015-03-12 19:21:02

虽然Peter (上面)给出的答案也是正确的,但我们也可以直接在主干-ui.js库文件中进行更改:

在tableview的初始化方法(在文件主干-ui.js中搜索tableview,查找它的初始化函数)中添加:

代码语言:javascript
复制
this.model.on("change", this.render, this);

你会没事的。(您可能希望在主干-ui.js文件的list属性的初始化方法中添加同一行,以获得列表的响应视图)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28974534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档