在meteor中初始化新对象是否触发新模板?

在meteor中初始化新对象是否触发新模板?,meteor,meteor-blaze,Meteor,Meteor Blaze,我正在构建一个页面,需要创建一个矩阵,其中的数字或行和列是被动的,可以通过用户单击添加行等来更改 我使用了一个函数来准备每个单元格的内容,客户端: function prepareCells(rows, columns){ let matrixContent = {}; ...logics here... return matrixContent; } 在客户端中,还有以下助手: Template.matrix.helpers({ matrixContents(){

我正在构建一个页面,需要创建一个矩阵,其中的数字或行和列是被动的,可以通过用户单击添加行等来更改

我使用了一个函数来准备每个单元格的内容,客户端:

function prepareCells(rows, columns){
    let matrixContent = {};
    ...logics here...
    return matrixContent;
}
在客户端中,还有以下助手:

Template.matrix.helpers({

matrixContents(){
    const instance = Template.instance();
    let rows = instance.state.get("rows");
    let columns = instance.state.get("columns");    
    return prepareCells(rows, columns);
},
最后,在html Blaze页面中有如下内容:

{{#each row in matrixContents.rows}}
     {{#each row.cell}}
          {{> cellcontent}}
     {{/each}}
{{/each}}
当反应变量发生变化时,将重新运行帮助程序。。但是cellContent模板的onCreated函数不是!例如,如果添加一行,onCreated只运行n次,其中n是当前的列数,而函数prepareCells总是返回一个新对象。在onCreated中有一些相关的逻辑,必须执行这些逻辑来初始化cellcontent的正确反应变量

Meteor使用什么模式来决定何时创建或不创建新模板?我发现了一种解决方法,cellcontent的助手和内部模板使用currentData:

Template.cellcontent.helpers({
    getFoo(){
         let data = Template.currentData();
         ...logic with the "real" data inside the cellcontent
    }
因为依赖于reactiveDict的cellcontent的助手会发现意外值,因为reactiveDict是在创建时启动的,并不总是运行,例如:

Template.cellcontent.helpers({
    getFoo(){
         let template = Template.instance();
         instance.state =....you get unexpected data here

    }
有关于这种行为的参考资料吗

为了重新运行一次创建的函数,您需要a添加自动运行b将其绑定到反应源,因此源触发自动运行,最后c传入一些数据以触发自动运行

根据上面的示例,这可能如下所示:

Template.cellcontent.onCreatedfunction cellContentOnCreated{ const instance=this; instance.state=new ReactiveDict;//保存处理后的数据 //a-在更改传入数据时自动运行此实例 instance.autorunfunction自动运行{ //b-自动绑定到反应式数据源 //因为Template.currentData处于被动上下文中 //如果更改,自动运行将自动重新运行 const data=Template.currentData; const processedData=/…处理传入数据 set'processedData',processedData; }; }; Template.cellcontent.helpers{ 格特福{ 返回Template.instance.state.get'processedData'; } }; 为了实现c,您需要将一些数据传递到单元格内容模板:

{{#each row in matrixContents.rows}}
     {{#each row.cell}}
          {{> cellcontent data=this}}
     {{/each}}
{{/each}}

注意,这表示每个块中的当前元素,并且要求row.cell是单元格内容元素的数组。如果不是这样,您可以查看此结构并重新组织它,以便将单元格内容数据传递到cellcontent模板。

您需要将基于反应的逻辑置于自动运行中创建的OnCreate上-谢谢,参考帮助我更好地理解引擎,如果您发布它,我将检查它作为答案!