标签: backbone-views

如何根据它的模型属性为Backbone.js视图动态设置className?

基本上我需要的是做这样的事情

App.CommentView = Backbone.View.extend({
  className: function() {
    if (this.model.get('parent_id')) {
      return 'comment comment-reply';
    } else {
     return 'comment';
    }
  },
Run Code Online (Sandbox Code Playgroud)

问题是,传递给的函数className是在视图模板的html的上下文中执行的,所以我无法调用this.model.

有没有什么办法可以在渲染过程中访问模型?或者我是否需要稍后设置该类,例如在render函数中?

javascript backbone.js backbone-views

10
推荐指数
1
解决办法
8106
查看次数

绑定到表单时的骨干模型状态

我正在使用Backbone构建一个表单,并希望在"模糊"事件中验证其字段.

连接到事件很容易,但我很好奇的是模型是否应该在模糊时更新或仅在表单提交时更新?

在模糊上更新模型

  • model.set({...}, {validate:true});
  • 如果您的模型具有多个属性,则每次都会对所有属性运行验证
  • 在创建新项目时,模型状态并不重要,因为它可能尚未与任何其他模块共享
  • 在编辑项目时,模型处于这种奇怪的过时/更新状态,具体取决于人员在表单中的位置.如果模型在多个模块之间共享怎么办?

在提交时更新模型

  • 不能model.set()用于验证,因此模型需要暴露一些验证方法(例如MyModel.validZip())
  • 在提交时,即使已经验证了所有字段,也set()需要调用以更新模型,这将导致验证再次发生(不完全确定这是坏事)

我已经通过了几个有关骨干GitHub的问题(读1,2,3)和骨干开发者似乎得出一个模型和形式之间的线路.

此外,Backbone.Form插件似乎保留内部fields属性以跟踪表单字段,完成后,调用.commit()以更新模型.

因此,似乎在提交时更新模型是更好的方法.那是你的体验吗?

javascript validation backbone.js backbone-views

10
推荐指数
1
解决办法
569
查看次数

如何在backbone.js中创建基本视图?

我需要创建一个基本视图,我的所有视图都将扩展.我不确定在何时何地宣布这个观点.

基本上,我需要注入global variables我的所有模板,而不是在每个render()方法中都这样做.

这是我现在的树形结构:

|-main.js
|-app.js
|-require.js
|-App
|  |-View
|  |   |-Dashboard.js
|  |   |-Header.js
|  |   |-Content.js
|  |-Model
|  |-Collection
|  |-Template
|
|-Libs
   |-...
Run Code Online (Sandbox Code Playgroud)

这是我的app.js

var App = {
    ApiURL: "http://domain.local",
    View: {},
    Model: {},
    Collection: {},
    Registry: {},
    Router: null
};

define(['backbone', 'View/Dashboard'], function(Backbone){
    var AppRouter = Backbone.Router.extend({
        routes : {
            "dashboard": "index",
        },

        index: function() {
            console.log('routing index route...');
            var x = new App.View.Dashboard({el:$('#main-content'), type:'other'});
        }
    });

    var initialize = …
Run Code Online (Sandbox Code Playgroud)

extends backbone.js backbone-views

9
推荐指数
1
解决办法
5291
查看次数

wordpress 3.5媒体管理器 - 添加我自己的backbone.js视图

我目前正在尝试使用新的WordPress 3.5媒体管理器,它使用backbone.js来创建和填充其模态窗口.

我想要做的是:用户点击上传按钮,媒体管理器弹出,用户选择图像,印刷机插入,然后图像被保存到自定义字段.

所有这些都已经有效,我唯一想改变的是用我自己的模板填充媒体上传者的边栏(用户可以添加标题,标题,选择大小等).

我已经阅读了很多关于如何使用骨干的教程,但现在有点卡住了.这是我到目前为止的一些代码:

//defined earlier:
var frame;

//on click:

if ( file_frame )
{
    file_frame.open();
    return;
}
else
{
    // Create the media frame.
    file_frame  = wp.media(
    {
    frame:   'select',
    state:   'mystate',
    library:   {type: 'image'},
    multiple:   false
    });

    file_frame.states.add([

    new media.controller.Library({
        id:         'mystate',
        title: 'my title',
        priority:   20,
        toolbar:    'select',
        filterable: 'uploaded',
        library:    media.query( file_frame.options.library ),
        multiple:   file_frame.options.multiple ? 'reset' : false,
        editable:   true,
        displayUserSettings: false,
        displaySettings: true,
        allowLocalEdits: true,
          //AttachmentView: ?

    }),
    ]);

file_frame.open();

}
Run Code Online (Sandbox Code Playgroud)

我也尝试过注册我自己的模板:

media.view.Attachment.mySidebar …
Run Code Online (Sandbox Code Playgroud)

wordpress backbone.js backbone-views wordpress-3.5

9
推荐指数
1
解决办法
2753
查看次数

从项目视图到父布局视图的木偶泡沫事件?

我有一个带有区域的布局视图,在该区域中我有一个触发事件的项目视图,但它似乎没有冒泡到布局视图.我做错了什么还是这个设计行为?我假设没有添加itemview前缀,因为父视图不是集合视图?无论哪种方式,事件都不会冒泡到布局视图.

layoutView = Marionette.Layout.extend({
        template: "#layout-template",
        regions: {
            titleRegion: "#job-title-region"
        },
        triggers: {
            "save:clicked" : "onSaveClicked"
        },
        onSaveClicked: function (args) {
            alert('Clicked');
        }
    });

childview = Marionette.ItemView.extend({
        template: "#child-template",
        triggers: {
            "click .js-save": "save:clicked"
        }
    });
Run Code Online (Sandbox Code Playgroud)

更新:

看到这个小提琴http://jsfiddle.net/7ATMz/11/我设法得到布局视图来监听子事件但我必须在布局视图本身之外连接并打破封装.无论如何我可以在布局视图中执行此操作吗?

谢谢,

乔恩

backbone.js backbone-views marionette

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

事件发生两次

我正在声明一个这样的视图:

var VirtualFileSelectorView = Backbone.View.extend({
    selected: function() {
        console.log("selected function");
    },

    initialize: function() {
        // Shorthand for the application namespace
        var app = brickpile.app;
        // bind to the selected event
        app.bind('selected', this.selected, this);
    }
});
Run Code Online (Sandbox Code Playgroud)

然后我实例化了这个View的两个实例,你可以在这里看到:http://cl.ly/H5WI

问题是当选择事件被触发时,所选功能被调用两次?

backbone.js backbone-events backbone-views

8
推荐指数
1
解决办法
7579
查看次数

即使我没有通过页面解析,在页面上多次使用相同的ID错误练习?

我知道在页面中多次使用相同的id会产生格式错误的HTML.使用jquery选择器时,只返回带有id的第一个元素,但在我的应用程序中,我不应该遇到这个问题.

我有项目列表视图,它们都有我需要引用的元素.由于每个项目只能访问自己$el传入的id选择器,因此不会产生任何冲突(即使页面上有多个).

我模拟了我的小提琴意味着这里

在这个项目中,我没有进行任何页面广泛的解析,所以我认为它应该是安全的.我有什么理由不这样做吗?

html html-parsing backbone.js backbone-views marionette

8
推荐指数
1
解决办法
5543
查看次数

在Backbone中,this.model是未定义的,为什么?

我到处寻找答案,但对我发现的东西不满意.

问题是,我正在从Addy Osmani做一个教程,在Backbone中制作一个'Todo'应用程序,但当我看到控制台时,我得到一个错误说this.model is undefined.

我甚至试过这个SO回答Backbone模型错误显示在控制台中,但我仍然得到相同的错误.请告诉我有什么问题.

顺便说一句,什么是this.modelthis.collection?我有一个想法,他们参考Backbone.Model,Backbone.Collection但他们如何工作?我问这是因为在另一个教程this.collectionthis.model.models也是不确定的,当我明确的ModelCollection.

非常感谢

JS:

//Model
var Todo = Backbone.Model.extend({

  defaults: {
    title: 'Enter title here',
    completed: true
  },

  validate: function(attrs) {
    if (attrs.title === undefined) {
        return 'Remember to enter a title';
    }
  },

  initialize: function() {
    console.log('This model has been initialized');

    this.on('change:title', function() {
        console.log('-Title values for this model have changed');
    });

    this.on('invalid', function(model, …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-views

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

Backbone Marionette,Composite View初始化两次

我正在使用一个复合视图,其中$ .dialog调用了它的$ el.

然后,合成视图将列出集合中的项目.

现在我已经尝试了多种方式来渲染集合项:从复合视图外部获取它,然后将其附加到视图中,在视图内部获取,从我的服务器脚本预加载集合等等...

一切似乎都有效,但同样的问题发生..

一旦复合视图看到这个集合,它就会再次调用它自己的初始化函数......

我完全理解渲染函数将在集合重置或添加时调用...但是初始化??? 我完全不知道为什么会这样.

showCustomFieldSelect: function(e){

    log('triggered');

    e.preventDefault();

    var cl = new AustApp.Collections.CustomField;

    var select = new AustApp.Views.AvailableCustomFieldsList({
        el: "#available-custom-fields-popup",
        collection: cl
    });

    cl.fetch();


    cl.once("reset", function(){
        // this bind was
        // previously used for creating the view
        // or calling render functions directly
        // amongst numerous efforts to debug

    }, this);


},



MyApp.Views.AvailableCustomFieldsList = function(){

var AvailableCustomFieldsList = Backbone.Marionette.CompositeView.extend({

    template: "#available-contact-list-custom-field-list-js",

    tag: "div",

    itemView: AustApp.Views.AvailableCustomFieldsListItem,

    emptyView: AustApp.Views.EmptyAvailableCustomFieldsListItem,

    itemViewContainer: "ul",

    templateHelpers: viewHelpers,

    initialize: function(){
        log('init called'); …
Run Code Online (Sandbox Code Playgroud)

jquery backbone.js backbone-views marionette

8
推荐指数
2
解决办法
3725
查看次数

如何只调用一次骨干视图事件?

我有一个骨干视图,看起来像这样:

var myView = Backbone.view.extend({
    events: {'click .myClass': 'myFunction'},
    initialze: //initialize function,
    render: //render function,
    myFunction: function (e) {
        //do something
    }
});
Run Code Online (Sandbox Code Playgroud)

我想myFunction只做一次工作,然后停止被叫.我相信我可以使用主干once()方法来实现这一点,但无法弄明白.这是最好的方式,我该如何构建它?谢谢!

javascript backbone.js backbone-views

8
推荐指数
2
解决办法
3798
查看次数