我试图了解他们在Backbone 0.9.9中所做的新变化.
目前,我有问题理解之间的区别listenTo和on:
listenTo
var View = Backbone.View.extend({
tagName: "div",
intialize: function() {
this.listenTo(this.model, 'change', this.render);
},
render: function() {
this.$el.empty();
this.$el.append('<p>hello world</p>');
}
});
Run Code Online (Sandbox Code Playgroud)
上
var View = Backbone.View.extend({
tagName: "div",
intialize: function() {
this.model.on('change', this.render, this);
},
render: function() {
this.$el.empty();
this.$el.append('<p>hello world</p>');
}
});
Run Code Online (Sandbox Code Playgroud)
我听说listenTo允许stopListening取消订阅所有事件,例如删除视图以避免内存泄漏.
这是唯一的原因吗?
我有一个视图Pannel,它只是一个带有关闭按钮的背景.我想将该视图扩展为一个名为PannelAdvanced.我怎么能用backbone.js做到这一点?
现在所有的例子都有,Backbone.View.Extend但只是延伸Backbone.View; 我想扩展我的PannelView.
多年来这个问题让我感到震惊......
假设我有一个非常简单的Backbone应用程序,其中包含一个项目列表.单击某个项目时,您会看到该项目的详细视图.
是不是更好
我更喜欢选项2,但有问题因为我没有正确地破坏视图,并且从无处开火的事件中获得臭名昭着的"鬼视图"问题!
什么是最佳做法?
在我看过的大多数BackboneJS示例中,父视图调用render()子视图上的函数.这对我来说有点奇怪.也许它完全用于优化或其他东西,但我不明白为什么优化不能在子视图本身内发生.儿童观点是否应该负责自己打电话render()?在我的所有观点中,我最终得到的结论如下:
initialize: function() {
this.render();
}
Run Code Online (Sandbox Code Playgroud)
此外,如果我的父视图更新了子视图的model属性,那么孩子应该如何知道模型已更改(因此render()需要调用)?我假设在这种情况下,父母被迫打电话给孩子render().虽然有点推断,为什么父母需要知道孩子在模型改变时需要重新渲染?看起来调用子视图的render函数在父视图的域之外.
我开始计划一个网络应用程序,Backbone.js将非常适合客户端.我一直在计划为后端使用节点,但这暂时是开放的.
我需要一种方法来保护前端应用程序与数据库的连接.我在Quora上与其他人进行了讨论,但我认为思考过程从核心问题中抽象得过于抽象.
我更喜欢通过RESTful端点访问数据,但我需要确保只有我的应用可以与API通信.我将完全控制应用程序的前端和后端.有可能围绕数据库构建其他应用程序(一年或两年),但是它们将由我开发(即不是公共API),并且这些可能会使用单独的OAuth端点.
关于应用程序的一些注释(可能有用也可能没用):
任何关于最佳方法的建议将不胜感激.
security rest restful-authentication client-side backbone.js
我想使用Backbone.js进行一些事件处理,但我对周期性引用和内存管理没有信心.假设我有一些名为EventStation的静态事件源 - 所以,在脚本开头我说:
var source = new EventSource();
Run Code Online (Sandbox Code Playgroud)
source是为了生活的页面生活,这很好.现在,我还有一个事件消费者:
var EventConsumer = Backbone.Model.extend({
initialize: function(params) {
source.on("some_event",this.onSomeEvent,this);
}
});
function later() {
var consumer = new EventConsumer();
// consumer now gets leaked... (I think)
}
Run Code Online (Sandbox Code Playgroud)
我later()在某个时候打电话- 最后,我不再有任何消费者的权利,除非我去挖掘内部的东西source.我想我需要添加一些新功能EventConsumer,比如
cleanup: function() {
source.off("some_event",this.onSomeEvent,this);
}
Run Code Online (Sandbox Code Playgroud)
然后在最后调用它later().
这似乎......不像我想的那么干净.有没有办法更好地做到这一点?如果我使用DOM事件,这会有不同的处理方式吗?