@ 对象键中的符号
@ symbol in object key
我不知道 post 这个问题的正确位置,但我正在阅读 Marionette 文档并在描述
时看到了以下代码
var MyView = Marionette.ItemView.extend({
ui: {
"destroy": ".destroy-btn"
},
events: {
"click @ui.destroy": "warnBeforeDestroy"
}
我以前从未在对象键中看到过 @
符号。 @
是什么意思,还是只是字符串的一部分,没有什么特别之处?
那些只是普通的对象键。他们没什么特别的。
var events = {
"click @ui.destroy": "warnBeforeDestroy"
};
events["click @ui.destroy"]; // 'warnBeforeDestroy'
看起来那些在 Marionette 的上下文中可能是特殊的,但这与 JSON 无关。
JSON是一种将对象描述为文本数据的格式,所以没有JSON个对象...只有JSON个字符串,像"[1,2,3]"
就是JSON 表示三个元素的数组。
你展示的是一个 Javascript 对象,他们可以使用任何字符串作为键,字符 @
真的没什么特别的。
如果您尝试使用不是字符串的内容作为键,它无论如何都可以通过首先将其转换为字符串来工作...例如:
var obj1 = {};
obj1[12] = 99;
console.log(obj1["12"]);
请注意,如果您想使用 Javascript 对象作为通用存储的字典,您可能会遇到继承属性的问题...例如:
var obj2 = {};
if (obj2["constructor"]) { console.log("What? not empty?"); }
然而,您可以使用 hasOwnProperty
.
检测密钥是继承的还是特定对象实例的一部分
TL;DR Backbone.Marionette 视图中事件对象的 属性 名称中以 @
符号开头的字符串是由 Marionette 解析。 Marionette 将匹配 @ui.
之后的字符串,并将其替换为该视图的 ui
散列中的相应值。在您的示例中,"click @ui.destroy"
变为 "click .destroy-btn"
。
Marionette ui
Marionette 增强了一些语法糖,以帮助您更好地组织视图中的 DOM 依赖项。换句话说,marionette 视图可以在您的视图中使用 ui
散列,该散列包含对该视图 el
内的 DOM 元素的引用。在您的示例中,您设置了
ui: {
"destroy": ".destroy-btn"
}
这假定您的视图模板将至少有一个具有 class .destroy-btn
的元素。呈现视图后,Marionette 将调用 view.bindUIElements
并且 ui
散列的每个成员都将填充 jQuery 对象,该对象表示与选择器传递给 ui
对象。
因此,在您的视图中,this.ui.destroy
将 return 选择器的 jQuery 对象 .destroy-btn
在您的视图中 el
.
Marionette 解析 events
散列
另一件事 Marionette 将为您做,这就是您的问题所在 ,是解析您的 events
哈希。如果它找到任何包含 @ui.
前缀的 events
属性,它将捕获 .
和 return 存储在 ui
哈希中的选择器之后的字符串。
所以,如果你有
events: {
"click @ui.destroy": "warnBeforeDestroy"
}
Marionette 将交给 Backbone 一个 events
散列,如下所示:
events: {
"click .destroy-btn": "warnBeforeDestroy"
}
进一步参考
我不知道 post 这个问题的正确位置,但我正在阅读 Marionette 文档并在描述
时看到了以下代码var MyView = Marionette.ItemView.extend({
ui: {
"destroy": ".destroy-btn"
},
events: {
"click @ui.destroy": "warnBeforeDestroy"
}
我以前从未在对象键中看到过 @
符号。 @
是什么意思,还是只是字符串的一部分,没有什么特别之处?
那些只是普通的对象键。他们没什么特别的。
var events = {
"click @ui.destroy": "warnBeforeDestroy"
};
events["click @ui.destroy"]; // 'warnBeforeDestroy'
看起来那些在 Marionette 的上下文中可能是特殊的,但这与 JSON 无关。
JSON是一种将对象描述为文本数据的格式,所以没有JSON个对象...只有JSON个字符串,像"[1,2,3]"
就是JSON 表示三个元素的数组。
你展示的是一个 Javascript 对象,他们可以使用任何字符串作为键,字符 @
真的没什么特别的。
如果您尝试使用不是字符串的内容作为键,它无论如何都可以通过首先将其转换为字符串来工作...例如:
var obj1 = {};
obj1[12] = 99;
console.log(obj1["12"]);
请注意,如果您想使用 Javascript 对象作为通用存储的字典,您可能会遇到继承属性的问题...例如:
var obj2 = {};
if (obj2["constructor"]) { console.log("What? not empty?"); }
然而,您可以使用 hasOwnProperty
.
TL;DR Backbone.Marionette 视图中事件对象的 属性 名称中以 @
符号开头的字符串是由 Marionette 解析。 Marionette 将匹配 @ui.
之后的字符串,并将其替换为该视图的 ui
散列中的相应值。在您的示例中,"click @ui.destroy"
变为 "click .destroy-btn"
。
Marionette ui
Marionette 增强了一些语法糖,以帮助您更好地组织视图中的 DOM 依赖项。换句话说,marionette 视图可以在您的视图中使用 ui
散列,该散列包含对该视图 el
内的 DOM 元素的引用。在您的示例中,您设置了
ui: {
"destroy": ".destroy-btn"
}
这假定您的视图模板将至少有一个具有 class .destroy-btn
的元素。呈现视图后,Marionette 将调用 view.bindUIElements
并且 ui
散列的每个成员都将填充 jQuery 对象,该对象表示与选择器传递给 ui
对象。
因此,在您的视图中,this.ui.destroy
将 return 选择器的 jQuery 对象 .destroy-btn
在您的视图中 el
.
Marionette 解析 events
散列
另一件事 Marionette 将为您做,这就是您的问题所在 ,是解析您的 events
哈希。如果它找到任何包含 @ui.
前缀的 events
属性,它将捕获 .
和 return 存储在 ui
哈希中的选择器之后的字符串。
所以,如果你有
events: {
"click @ui.destroy": "warnBeforeDestroy"
}
Marionette 将交给 Backbone 一个 events
散列,如下所示:
events: {
"click .destroy-btn": "warnBeforeDestroy"
}