小编ggo*_*zad的帖子

如何在Backbone.js中处理初始化和渲染子视图?

我有三种不同的方法来初始化和呈现视图及其子视图,并且每个方法都有不同的问题.我很想知道是否有更好的方法可以解决所有问题:


情景一:

在父级的初始化函数中初始化子级.这样,并不是所有东西都会陷入渲染状态,因此渲染时阻塞较少.

initialize : function () {

    //parent init stuff

    this.child = new Child();
},

render : function () {

    this.$el.html(this.template());

    this.child.render().appendTo(this.$('.container-placeholder');
}
Run Code Online (Sandbox Code Playgroud)

问题:

  • 最大的问题是第二次在父级上调用render将删除所有的子事件绑定.(这是因为jQuery的$.html()工作原理.)这可以通过调用this.child.delegateEvents().render().appendTo(this.$el);来减轻,但是第一个,也是最常见的情况是,你正在做更多不必要的工作.

  • 通过附加子项,可以强制render函数了解父DOM结构,以便获得所需的顺序.这意味着更改模板可能需要更新视图的渲染功能.


情景二:

初始化父级的子级initialize(),但不是追加,而是使用setElement().delegateEvents()将子级设置为父级模板中的元素.

initialize : function () {

    //parent init stuff

    this.child = new Child();
},

render : function () {

    this.$el.html(this.template());

    this.child.setElement(this.$('.placeholder-element')).delegateEvents().render();
}
Run Code Online (Sandbox Code Playgroud)

问题:

  • 这使得delegateEvents()现在变得必要,这只是在第一个场景中的后续调用中必需的一点点负面.

情景三:

render()而是在父方法中初始化子项.

initialize : function () {

    //parent init stuff
},

render : function () {

    this.$el.html(this.template()); …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js

198
推荐指数
3
解决办法
6万
查看次数

在backbone.js中测试路由器是否正确?

所以我刚刚开始使用sinon.js&为我正在进行的javascript应用程序编写测试jasmine.js.总体上工作得很好,但我还需要能够测试我的路由器.

处于当前状态的路由器将触发许多视图和其他内容,jasmine.js通过调用Backbone.navigate依赖于应用程序状态和UI itneraction来终止当前测试.

那么我怎样才能测试到不同位置的路由是否可行,同时保持路由器"沙盒化"并且不允许它们改变路由?

我可以设置一些监视pushState更改或类似的模拟函数吗?

javascript backbone.js jasmine sinon

31
推荐指数
3
解决办法
9048
查看次数

在哪里编码以覆盖backbone.sync

我想覆盖backbone.sync我已经问过这个,但问题是我不太明白.如果我要覆盖同步功能,我需要知道放置代码的位置.

如果我把它放在这样的模型上

model = Backbone.Model.extend({ sync:"" });
Run Code Online (Sandbox Code Playgroud)

那怎么称呼呢?如果我要使用保存方法.另外我需要将create的methodMap从POST更改为PUT.我暂时使用了这个'create': 'PUT',实际编辑backbone.js文件(我知道它并不好).在我忘记之前我还需要添加这个

sendAuthentication = function (xhr) {
          xhr.setRequestHeader('Authorization', auth)
}; 
Run Code Online (Sandbox Code Playgroud)

作为beforeSend参数,因为我的服务器具有身份验证.我应该在哪里做呢?我应该去哪里放密码?在我的模特?在我的收藏?还是在我看来?有帮助吗?谢谢.

更新

我也可以覆盖我的收藏中的同步吗?我的意思是我可以拥有这样的东西吗?

collection = Backbone.Collection.extend({ sync:""});
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js underscore.js

7
推荐指数
1
解决办法
5527
查看次数

使用setContent时,保持小插入/书签位置

我正在开发一个开源产品,以便在CMS中进行协作编辑.用例如下:当用户A正在编辑一些小节点时,用户B更新同一节点.除了保留光标位置外,一切都工作正常,更新用户的微小编辑器.即

var bookmark = editor.selection.getBookmark();
editor.setContent(content);
editor.selection.moveToBookmark(bookmark);
Run Code Online (Sandbox Code Playgroud)

如果内容在插入符号之前已更改,则无效. http://tinymce.moxiecode.com/forum/viewtopic.php?id=20458提到会有更新来处理这种情况,但我现在能做些什么吗?先感谢您!

tinymce

6
推荐指数
1
解决办法
2961
查看次数

阻止用户将PMP,TIFF等图像上传到Plone中的ImageField

用户可以这样做.

但是,图像自动调整大小等会中断.

这让我成为一个伤心的男孩.

如何在全站范围内限制图片上传到GIF,PNG和JPEG?

  • 对于Archetypes

  • 对于敏捷

plone archetypes dexterity

4
推荐指数
1
解决办法
483
查看次数