Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sessions变量在Meteor中更新DOM的速度不够快_Meteor - Fatal编程技术网

Sessions变量在Meteor中更新DOM的速度不够快

Sessions变量在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

我注意到会话变量的这个属性:

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 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);
  });
};