Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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/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
Javascript Meteor#每个和会话数据_Javascript_Meteor - Fatal编程技术网

Javascript Meteor#每个和会话数据

Javascript Meteor#每个和会话数据,javascript,meteor,Javascript,Meteor,我有一个基于异步信息的模板,因此我使用会话数据,以便在数据到达时反应性地呈现视图。比如: item.html: <template name="item"> {{#with item}} {{itemInformation.name}} {{/with}} </template> 如果有一个项目模板处于活动状态,这种方法似乎可以很好地工作。但是,如果我在#每个循环中使用这种方法,我会遇到会话数据上的冲突 是否有我可以使用的“本地”会话数据

我有一个基于异步信息的模板,因此我使用
会话
数据,以便在数据到达时反应性地呈现视图。比如:

item.html:

<template name="item">
    {{#with item}}
        {{itemInformation.name}}
    {{/with}}
</template>
如果有一个项目模板处于活动状态,这种方法似乎可以很好地工作。但是,如果我在
#每个
循环中使用这种方法,我会遇到会话数据上的冲突

  • 是否有我可以使用的“本地”
    会话
    数据
  • 当基于
    #每个
    循环中的异步数据时,重新渲染视图的正确方法是什么
  • 您可以在onCreated模板回调(
    self.localSession=new ReactiveDict()
    )中创建一个ReactiveDict(-Session实际上在其实现中使用它),并使用它代替Session(
    self.localSession.set('itemminformation',data)
    )。 您可以通过以下方式在模板帮助器中访问它:
    template.instance().localSession.get('itemInformation')
  • 如果它只是一个要存储在字典中的项,那么也可以以相同的方式使用single-ReactiveVar()

  • 正如您所注意到的,您需要在一些反应源中设置异步内容,您可以使用我上面描述的构造
  • 您的代码:

    Template.item.created = function () {
         var self = this;
         self.localSession  = new ReactiveDict ();
         getItemData(self.data.item.id}, function(data) {
             self.localSession.set("itemInformation", data);
        });
    }
    
    Template.item.helpers({
        itemInformation: function() {
            return Template.instance().localSession.get("itemInformation");
        }
    });
    
    在希望在应用程序的各个部分之间共享数据时使用。因为它是一个全球性的,你可能不想把它弄得太乱

    为什么还要使用
    ReactiveDict
    ?如果您打算每个模板只存储一个项目,那么a是一个明显的方法!另外,
    ReactiveVar
    可以包含任何内容,而

    因此,

    请注意,每个模板将根据其自己的
    ReactiveVar
    实例的后续
    set
    更新。如果您希望使用
    getItemData
    定期更新它们,您没有太多选项。
    因为这是一个异步方法,所以你就不走运了。最好的方法是定期轮询回调中的数据,并
    item.set()
    。我已经为同步getter做了类似的事情,您必须调整实现


    如果您使用上述轮询策略,请不要忘记在模板的
    onestroyed
    回调中调用。

    这非常有效,而且比我尝试的滥用SessionData的方法要好得多。有关此问题的完整讨论,请参阅。
    Template.item.created = function () {
         var self = this;
         self.localSession  = new ReactiveDict ();
         getItemData(self.data.item.id}, function(data) {
             self.localSession.set("itemInformation", data);
        });
    }
    
    Template.item.helpers({
        itemInformation: function() {
            return Template.instance().localSession.get("itemInformation");
        }
    });
    
    Template.item.created = function () {
        getItemData(this.data.item.id, data => {
            this.item = new ReactiveVar(data);
        });
    }
    
    Template.item.helpers({
        itemInformation: () => Template.instance().item
    });