Sessions变量在Meteor中更新DOM的速度不够快
我注意到会话变量的这个属性: test.htmlSessions变量在Meteor中更新DOM的速度不够快,meteor,Meteor,我注意到会话变量的这个属性: test.html <input name='test' type='text' placeholder='something' value='{{testVal}}'> 模板.test.onRendered // Sets the initial value of the session var and the form shows "I like cats" Session.set("testVal", "I like cats"); var
<input name='test' type='text' placeholder='something' value='{{testVal}}'>
模板.test.onRendered
// Sets the initial value of the session var and the form shows "I like cats"
Session.set("testVal", "I like cats");
var displayValue = function(newInput){
Session.set("testVal", newInput);
console.log("session has been set to: ", newInput);
console.log("value of form entry using jQuery: ", $('input[name="test"]').val());
};
当我在Chrome控制台中运行displayValue(“lal”)
时,我得到:
"session has been set to: lalalalal"
"value of form entry using jQuery: I like cats."
在为会话变量设置新值后,文本输入的值确实会在视觉上反应性地更改为“lal”,但似乎会话变量的DOM更新不够快-jQuery仍然会在反应性更改之前拾取旧值,这意味着会话变量对DOM的响应式更新是异步的
这意味着,如果使用反应变量自动更新表单字段,然后使用jQuery获取表单值,则需要等待DOM完全更新后才能使用jQuery
有人知道这样做的方法吗,最好是在这个例子中?在这个特定的例子中,为什么不使用您正在设置
会话
变量的值,即新输入
代码的问题在于,客户端上的反应式编程本质上是异步的:当您将Session
变量设置为新值时,将使负责在模板标记内设置DOM输入值的帮助器内的反应式计算无效
您可以使用Tracker.afterFlush
让反应式计算失效传播并重新运行帮助程序,从而真正更改您可以使用jQuery获取的输入值
var displayValue = function(newInput){
Session.set("testVal", newInput);
console.log("session has been set to: ", newInput);
Tracker.afterFlush(function(){
var testValue = $('input[name="test"]').val();
console.log("value of form entry using jQuery: ", testValue);
});
};
我实际上是在使用Autoform包生成表单。Autoform可以使用被动变量设置表单字段的初始值。我正在使用jQuery获取表单字段,我遇到了很多非常恼人的问题,使用jQuery获取的值与从表单中填充的任何新字段值都不同步。
var displayValue = function(newInput){
Session.set("testVal", newInput);
console.log("session has been set to: ", newInput);
Tracker.afterFlush(function(){
var testValue = $('input[name="test"]').val();
console.log("value of form entry using jQuery: ", testValue);
});
};