除非访问了数据属性,否则Blaze.getData(el)将返回null
Blaze.getData(el) returns null unless data property is accessed
我正在尝试在Meteor中列出可重新订购的项目。我的项目具有info.order
属性,我会在单击事件时更改该属性。为什么在我注释掉// ! ...
下面的行之前,下面的示例仍然有效?
如果我注释掉那一行,当事件处理程序中引用data._id
时,我会得到错误Cannot read property '_id' of null
。
这是最小Meteor javascript:
Widget = new Mongo.Collection('widget');
if (Meteor.isClient) {
function moveUp (mongo_id) {
var clicked = Widget.findOne({_id: mongo_id});
var above = Widget.findOne({'info.order': clicked.info.order - 1});
if (above) {
Widget.update({_id: clicked._id}, {$inc: {"info.order": -1}});
Widget.update({_id: above._id}, {$inc: {"info.order": 1}});
}
}
Template.widget.helpers({
// Get list of widget to display and sort by latest first.
widget: function(data){
return Widget.find({}, {sort: {'info.order': 1}});
},
display: function(mongo_id, info) {
var html = '<div>';
html += '<div>' + info.label + '</div>';
html += '<div><a href="#" class="btn btn-default js-moveup">Up</a></div>';
// ! IF NEXT LINE IS COMMENTED-OUT data == null IN EVENT HANDLER
html += '<div>' + info.order + '</div>';
html += '</div>';
return html;
}
});
Template.widget.events({
'click .js-moveup': function(e, tpl){
e.preventDefault();
var data = Blaze.getData(e.currentTarget);
moveUp(data._id);
}
});
} // end is MeteorClient
使用此模板:
<head></head>
<body>
{{> widget}}
</body>
<template name="widget">
<div class="container">
<h1>Widgets</h1>
{{#each widget}}
{{{display _id info}}}
{{/each}}
</div>
</template>
这个种子数据:
Meteor.startup(function () {
if (Widget.find().count() === 0) {
[{info :{label: "first", order: 1}},
{info: {label: "second", order: 2}},
{info: {label: "third", order: 3}}
].forEach(function(w){
Widget.insert(w);
});
}
});
我知道发生了什么…
Meteor必须将display()
的输出与其以前的值进行比较,并且只有在DOM发生更改(或类似情况)时才评估更新DOM。如果我不打印info.order,每个小部件的HTML都不会改变。
我通过用new Date()
替换info.order
来添加不同的内容来测试这一点,这些内容没有引用模型,当然,小部件也更符合预期。
所以,我要告诉大家的是,如果你从显示器返回原始HTML,Meteor会尝试写东西,但并不总是正确的。
相关文章:
- 数组在递归方法中设置为null
- JQuery需要帮助理解(i,el)
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 来自文本输入null的html javascript变量
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- php代码在textbox更改事件上显示null
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 为什么localStorage[“..”]未定义,而localStorage.getItem(“..”)为null
- ajax在输入等于null时进行检查
- html+javascript:如何在某些条件下禁用dropdownlist中的null选项
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- contentWindow.document.body is null
- 在经过DATE验证的列中创建null值
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- Ext.getCmp('panel')给出this.el为null或不是对象
- 除非访问了数据属性,否则Blaze.getData(el)将返回null