【问题标题】:Meteor.js, update view value based on template data, but not the record itself (ie. just view model)Meteor.js,根据模板数据更新视图值,而不是记录本身(即仅视图模型)
【发布时间】:2015-01-21 14:57:33
【问题描述】:

当我在任何 JS 函数中更改模板数据时,我试图让我的流星模板显示更新值,但它似乎没有做任何事情。 代码如下:

Template.editorder.rendered = function() {
  var self = this;

  //reference this.data later on
  Template.editorder.data = this.data;

  //Initialize the date pickers
    $('.datepicker').datepicker({
        selectedDate: new Date(),
        onDateChanged: function(date) {
            var d = new Date(date);
            //TRYING TO UPDATE THE "VIEW MODEL" HERE
            self.data.dateCreated = Template.editorder.data.dateCreated = date;
        }
    });
};

在我看来,我只是:

<template name="editorder">
 ...
 Date created: {{dateCreated}}
 ...
</template>

这根本不起作用。 self.data.dateCreated 或 Template.editorder.data.dateCreated 不会反映在视图中。我认为让更新显示的唯一方法是更新已发布的数据对象本身,但我还不想将更改发送到数据库。

我想这样做的方法可能是使用模板助手,但在我的测试中,我似乎也无法让它工作。我尝试设置一个 Template.editorder.viewmodel = function() { } 方法,该方法返回一个全局对象范围,我在 Template.editorder.rendered() 函数中将其分配为“this.data”,但更新了它viewmodel 也没有更新视图。

有没有办法做到这一点? 感谢您的帮助。

解决方案:您必须在自定义方法中使用 Session.set(),并在模板辅助方法中使用 Session.get() 来检索该变量。

【问题讨论】:

    标签: javascript meteor viewmodel


    【解决方案1】:

    一种解决方案是使用 Session。

    当日期更改时,您将调用 Session.set('dateCreated', newDate)。

    dateCreated 的模板助手将简单地返回 Session.get('dateCreated')。

    【讨论】:

    • 太棒了!谢谢你的解决方案。就个人而言,我希望有更好的方法来处理这种情况。依赖“会话”变量似乎是一种迂回的方式。也许流星会在未来推出更集成的解决方案。
    【解决方案2】:

    要响应式地更改值,您需要有一个返回响应式变量的助手。

    Template.editorder.helpers({
      dateCreated: function() {
        return Session.get('dateCreated');
      }
    });
    

    onDateChanged 函数将如下所示:

    $('.datepicker').datepicker({
      onDateChanged: function(date) {
        Session.set('dateCreated', date);
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2012-10-03
      • 1970-01-01
      • 2021-05-15
      • 2016-08-12
      相关资源
      最近更新 更多