有没有更好的方法来根据与Meteor.js反应的输入字段更新html?

时间:2013-08-24 04:59:55

标签: jquery angularjs meteor reactive-programming handlebars.js

我看到本教程使用Angular.js编写演示应用程序。它是Todo演示(http://angularjs.org),他只需在文本框中输入,然后轻松地在页面上反映出来。

我想在Meteor中重新创建此功能,但效果不佳。首先,由于某种原因,它不会更新最后一个字母。使用Angular.js执行此演示视频也更容易,效果更好,有没有更好的方法在Meteor中执行此操作?

另外,如果有办法访问DOM而不是辅助函数?在事件函数中,我可以使用't'变量来访问DOM,但是在helpers函数中我不知道如何,例如我是否想从helper函数中的div中获取文本。我不知道怎么做。

这是我的Meteor代码,这是一个现场演示:http://todotestapp.meteor.com

提前致谢

HTML

<head>
  <title>Todo</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  <input id="personName" type="text">
  <h1>Hello {{personName}}!</h1>

</template>

Meteor Javascript

if (Meteor.isClient) {
Template.hello.helpers({
    personName: function () {
        return Session.get("personName");
    }
});

Template.hello.events({
    'keypress #personName': function (e, t) {
        Session.set("personName", t.find("#personName").value);
    }
});

}

2 个答案:

答案 0 :(得分:5)

您应该使用&#34;输入&#34;事件。 不需要使用jQuery,模板实例.find方法很好。

Template.hello.events({
    'input #personName': function (e, t) {
        Session.set("personName", t.find("#personName").value);
    }
});

这可以按预期工作。

答案 1 :(得分:4)

1)使用keyup事件检测何时输入了新的字母 2)使用普通的jquery来获取值 所以:

Template.hello.events({
    'keyup #personName': function () {
        Session.set("personName", $("#personName").val());
    }
});