JavaScript应用程序架构:引用对象属性
JavaScript App Architecture: Referencing Object Properties
我有一个名为App
的对象,它包含主干应用程序的所有相关部分。
问题是:当我从应用程序的其他对象中调用应用程序中的对象时,它们是未定义的
我认为这是因为在定义应用程序对象之前,它们在应用程序中的对象中被称为表单。
如何在其中的对象调用应用程序中的其他对象之前定义应用程序
我的应用程序对象的一个示例,其中App.templates.restaurant
对象在Restaurant
视图中被调用,并返回undefined:
var App = {
...
templates: {
restaurant: "#RestaurantModel__template",
menu: "#MenuItemsModel__template"
},
...
Views: {
Restaurant: Backbone.View.extend({
tagName: "li",
template: Handlebars.compile($(App.templates.restaurant).html()),
...
)},
...
}),
...
}
您可以通过将空对象定义为App来解决它,这样处理器就知道它是什么:
var App = {};
App.Templates = { ... }
App.Views = { ... }
第二种解决方案是将其拆分为数据部分和功能部分(例如,通过创建init函数来创建Views sub(
var App = {
Templates : { ... },
init : function() {
App.Views = { ... }
}
}
问题的产生是因为处理器首先创建对象(并执行所有函数(,然后才将其分配给变量。您可以玩其他构造。
var x = 42;
x = { y : x }
代码的执行顺序如下:
- 创建一个对象
- y属性与x(42(的值相加
- 对象被指定给x变量
一个简单而明显的解决方案是首先定义App
对象,然后定义属性:
var App = {};
App.templates = { /* ... */ }
App.Views = { /* ... */ }
您有没有想过使用构造函数来创建它?
function App() {
this.templates = {
restaurant: "#RestaurantModel__template",
menu: "#MenuItemsModel__template"
};
var that = this;
this.views = {
Restaurant : Backbone.View.extend({
tagName: "li",
template: Handlebars.compile($(that.templates.restaurant).html()),
...
)},
}
}
var App=新应用程序((;
相关文章:
- 引用对象中的通用值
- 使用连字符引用对象的属性名称
- 这在 Object 方法中不引用对象,而是引用函数绑定到的标记
- Javascript对象文字,如何使用“this”来引用对象中的变量
- AngularJS select with ng选项不更新父作用域中的引用对象属性
- 如何在ES6中使用Arrow函数引用对象内部的其他函数
- 调用时可以省略引用对象
- 从函数中引用对象时遇到问题 - Adobe Animate canvas
- 在挖空中引用对象构造函数外部视图模型的属性
- 在 JavaScript 中的回调函数中引用对象
- 从充当事件处理程序的多个方法引用对象属性
- 如何引用对象中的其他节点
- 使用 javascript 通过 ID 正确引用对象
- 使用等效的 Object.indexOf 引用对象中的对象的索引
- Javascript - 事件方法中的引用对象
- 如何避免“this”引用 DOM 元素,并引用对象
- 如何按索引引用对象属性
- 在 AngularJs 中引用对象中的数据
- 如何在没有元素的情况下获取文件引用对象
- 为什么在 JavaScript 中引用对象的不存在属性不会返回引用错误