标签: backbone-views

Backbone.View"el"混乱

如何el处理视图?它必须设置,否则事件不会触发(见此处).

但它应该是页面上已有的元素吗?在我的应用程序中,我将(jQuery模板)模板渲染到Fancybox中.el那个案子应该怎么办?

javascript backbone.js backbone-views

97
推荐指数
2
解决办法
7万
查看次数

将backbone.js视图附加到现有元素与将el插入DOM中

我正在实现我的第一个实际的非教程Backbone应用程序,并且有关于使用backbone.js的一个方面的2-ahh问题,这对我来说并不是很好,这涉及将视图渲染el到DOM中而不是使用一个现有的元素el.我怀疑我会在这里为你们提供一些"受教育的时刻",并感谢你的帮助.

我在Web中看到的大多数Backbone View示例在创建View时指定了tagName,id和/或className,从而创建了一个与DOM无关的el.它们通常看起来像:

App.MyView = Backbone.View.extend({
    tagName: 'li',
    initialize: function () {
     ...
    },
    render: function () { 
        $(this.el).html(<render an html template>);
        return this;
    }
}); 
Run Code Online (Sandbox Code Playgroud)

但是这些教程并不总能解释他们如何建议将渲染的el放入DOM中.我已经看到了几种不同的方式.所以,我的第一个问题是:调用视图的渲染方法并将其插入DOM的适当位置在哪里?(不一定是同一个地方).我已经看到它在路由器,视图的初始化或渲染函数中完成,或者仅在根级文档就绪函数中完成.($(function ()).我可以想象这些都有效,但有没有正确的方法呢?

其次,我从一些HTML标记/线框开始,并将html部分转换为与骨干视图对应的js模板.而不是让视图渲染一个未连接的元素并在html中提供一个锚点来粘贴它,我觉得它更自然,当只有一个元素的视图,它不会消失,使用现有的,清空的包装元素(通常是a divspan)作为el自身.这样我就不用担心在文档中找到插入我未连接的el的位置,这可能最终看起来像这样(注意额外的分层):

<div id="insert_the_el_in_here">  <!-- this is all that's in the original HTML doc -->
    <div id="the_el">  <!-- i used to be a backbone generated, unattached el but have been rendered and inserted -->
        <!-- we're finally getting to some useful …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-views

71
推荐指数
2
解决办法
4万
查看次数

59
推荐指数
2
解决办法
3万
查看次数

Backbone JS:一个视图可以在其他视图中触发更新吗?

在我的简单项目中,我有2个视图 - 订单项视图(品牌)和应用.我有附加功能,允许选择多个项目:

var BrandView = Backbone.View.extend({
...some code...
    toggle_select: function() {
        this.model.selected = !this.model.selected;
        if(this.model.selected) $(this.el).addClass('selected');
        else $(this.el).removeClass('selected');
        return this;
    }
});

var AppView = Backbone.View.extend({
...some code...
    delete_selected: function() {
        _.each(Brands.selected(), function(model){ 
            model.delete_selected();
        });
        return false;
    },
});

事实是,我想知道选择了多少项.在此设置中,选择不会影响模型,因此不会触发任何事件.从MVC概念来看,我理解视图不应该与其他视图直接对话.那么AppView如何知道BrandViews中正在选择某些内容?

更具体地说,我AppView知道选择了多少项,所以如果选择了多于1个,我会显示一个菜单供多个选择.

javascript backbone.js backbone-events backbone-views

45
推荐指数
2
解决办法
3万
查看次数

在骨干视图中绑定多个事件类型

我想知道是否有可能在一条线路内绑定主干中的多个事件类型.

考虑以下:

var MyView = Backbone.View.extend({
    id: 'foo',
    events: {
        'click .bar': 'doSomething',
        'touchstart .bar': 'doSomething'
    },
    doSomething: function(e) {
        console.log(e.type);
    }
});
Run Code Online (Sandbox Code Playgroud)

基本上我想知道的是,是否可以将'click'和'touchstart'的事件绑定组合成一行 - 沿着以下行:

events: { 'click,touchstart .bar': 'doSomething' }
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激.

javascript backbone.js backbone-events backbone-views

27
推荐指数
2
解决办法
2万
查看次数

如何将2个处理程序附加到同一事件?

我可以将处理程序附加到Backbone Views,如:

var TodoView = Backbone.View.extend({
    events: {
        "xxx": "eventHandler1"
        "yyy": "eventHandler2"
    }
});
Run Code Online (Sandbox Code Playgroud)

但是如果我想在同一个事件中附加多个处理程序呢?

var TodoView = Backbone.View.extend({
    events: {
        "xxx": "eventHandler1"
        "yyy": "eventHandler2"
        "xxx": "eventHandler3" // this isn't valid ... at least in CoffeeScript
    }
});
Run Code Online (Sandbox Code Playgroud)

我可以创建一个自定义处理程序

function compositeXXX() { eventHandler1(); eventHandler2 }
Run Code Online (Sandbox Code Playgroud)

但这似乎并不理想......

javascript backbone.js backbone-events backbone-views

25
推荐指数
2
解决办法
4679
查看次数

backbone remove view删除el

我正在创建一个单页面应用程序,我对骨干很新.我在创建使用相同wrapper-div的多个视图时遇到问题.

我的设置:

我为所有视图添加了一个close函数:

Backbone.View.prototype.close = function(){
    this.remove();
    this.off();
    if (this.onClose){
        this.onClose();
    } 
}
Run Code Online (Sandbox Code Playgroud)

我有一个wrapper-div,我想渲染视图,删除它们并渲染新的视图.所以我的SetupView看起来像这样:

app.SetupView = Backbone.View.extend({
    el: '#my_view_wrapper',
    ...
});
Run Code Online (Sandbox Code Playgroud)

从我交换视图的函数我关闭当前(打开)视图,如下所示:

var v = this.model.get('view');
v.close();
Run Code Online (Sandbox Code Playgroud)

我的问题是我有多个视图使用相同的wrapper-div.但是当我关闭一个视图时,这个wrapper-div似乎被删除了,我尝试创建的下一个视图找不到这个div.

我想有一个简单的解决方案?我想重用相同的包装器,只删除其中的视图,而不是包装器本身.

javascript jquery backbone.js backbone-views

24
推荐指数
2
解决办法
8441
查看次数

是否可以阻止Backbone"读取"请求

我有一个拥有许多视图的主干应用程序.在视图之间切换会触发Ajax请求以获取不同的集合.如果启动新的请求,我想停止当前的"读取"ajax请求.可能吗?

jquery backbone.js backbone-views

20
推荐指数
3
解决办法
9412
查看次数

Backbone在一个事件中触发两种方法

我正在使用Backbone,我有一个定义了事件的视图:

    ....
    events: {
        'click .search-button': 'setModelTerm',
        'change .source-select': 'setModelSourceId',
        'change .source-select': 'activateSource'
    },
    ....
Run Code Online (Sandbox Code Playgroud)

我希望在事件change .source-select触发时触发两种方法.问题是事件对象中的最后一个条目会覆盖前面的条目.
如何在一个事件中触发两个方法?
(我试图阻止编写另一种调用这两种方法的方法)

backbone.js backbone-events backbone-views

17
推荐指数
2
解决办法
1万
查看次数

Backbone和document.title

我正在使用backbone.js创建一个单页应用程序,并想知道处理更改标题的最佳方法.我想在视图中有一个'title'选项,并让路由器(不知何故)设置document.title.有没有人实现类似的东西?谢谢

page-title backbone.js backbone-views

16
推荐指数
2
解决办法
7829
查看次数