流星助手中未获取会话变量
Session variable not being picked up in meteor helper
我有一个 select 下拉菜单。更改事件触发要设置的会话变量。我想使用此会话变量来填充 table,但是,模板未读取会话变量。我哪里错了?
<template name ='defaultTemplate'>
<label for="Schema" class="control-label">Select the Schema</label>
<select required="true" class="form-control" id="schemaNameId">
<!-- <option default>Select Schema </option> -->
{{ #each schemaNames}}
<option value="{{schemaName}}">{{schemaName}}</option>
{{/each}}
</select>
此时的控制台日志,表示未定义。在我 select 下拉列表中的内容之后,该值被设置为会话变量。
下面的 table 是上述模板的延续。但是,控制台日志似乎没有打印任何与 schemaLabel
helper
有关的内容
<table class="table table-bordered table-condensed">
<thead>
<tr>
<td style="width: 85px">Label</td>
<td>Current Value</td>
<td style="width: 250px">New Value</td>
</tr>
</thead>
<tbody>
{{#each schemaLabels}}
<tr>
<td>{{this.label}}</td>
<td>{{this.value}}</td>
</tr>
{{/each}}
</tbody>
</table>
</template>
事件:
起初,会话变量值未定义。当我不断更改下拉列表中的 selected 元素时,会话变量值不断更改,这很好。
Template.defaultTemplate.events({
"change #schemaNameId": function(event, template){
var selectValue = template.$("#schemaNameId").val();
// console.log(selectValue +" is selected from dropdown - message logged in events");
Session.set("selectedSchema",selectValue);
console.log(Session.get("selectedSchema")+ " is session variable set - message logged in events");
}
});
帮手:
随着我不断更改下拉列表,下面的控制台日志也在不断更改,这又是一个好兆头,因为我的会话变量可以在帮助程序中访问。
Template.defaultTemplate.schemaNames({
schemaNames: function () {
console.log(Session.get("selectedSchema")+ " is session variable - message logged in defaultTemplate:schemaNames");
return Defaults.find({},{schemaName:1}).map(function(c) {return {schemaName : c.schemaName};
});
},
但是,对于下面这个函数,控制台日志根本不打印任何东西!这意味着控制永远不会达到这一点,即使所有这些都在同一个助手中 class.
schemaLabels: function() {
var selectedSchema = Session.get("schemaName");
console.log(Session.get("schemaName") +"is the selectedSchema - message logged in defaultTemplate:schemaLabels");
return Defaults.find({schemaName:selectedSchema},{_id:0,schemaName:0}).map(function(c) {return {label : c.label, value: c.value};});
}
});
更新:
经过进一步修改,我注意到会话变量在 schemaLabels 辅助函数中只在一开始就被调用了一次。它设置为未定义。之后,再也不会调用这个了。因此,无论我 select 是什么下拉菜单,table 都不会填充任何内容。
我不明白你为什么认为 schemaLabels
助手应该被调用。
您正在使用两个不同的会话变量(selectedSchema
和 schemaName
),因此这些助手是分开的。
因此,如果您希望每次更改 selectedSchema
(Session),调用 schemaLabels
助手,您必须像这样修改 schemaLabels:
schemaLabels: function() {
var foo = Session.get("selectedSchema");
var selectedSchema = Session.get("schemaName");
console.log(Session.get("schemaName") +"is the selectedSchema - message logged in defaultTemplate:schemaLabels");
return Defaults.find({schemaName:selectedSchema},{_id:0,schemaName:0}).map(function(c) {return {label : c.label, value: c.value};});
}
我有一个 select 下拉菜单。更改事件触发要设置的会话变量。我想使用此会话变量来填充 table,但是,模板未读取会话变量。我哪里错了?
<template name ='defaultTemplate'>
<label for="Schema" class="control-label">Select the Schema</label>
<select required="true" class="form-control" id="schemaNameId">
<!-- <option default>Select Schema </option> -->
{{ #each schemaNames}}
<option value="{{schemaName}}">{{schemaName}}</option>
{{/each}}
</select>
此时的控制台日志,表示未定义。在我 select 下拉列表中的内容之后,该值被设置为会话变量。
下面的 table 是上述模板的延续。但是,控制台日志似乎没有打印任何与 schemaLabel
helper
<table class="table table-bordered table-condensed">
<thead>
<tr>
<td style="width: 85px">Label</td>
<td>Current Value</td>
<td style="width: 250px">New Value</td>
</tr>
</thead>
<tbody>
{{#each schemaLabels}}
<tr>
<td>{{this.label}}</td>
<td>{{this.value}}</td>
</tr>
{{/each}}
</tbody>
</table>
</template>
事件:
起初,会话变量值未定义。当我不断更改下拉列表中的 selected 元素时,会话变量值不断更改,这很好。
Template.defaultTemplate.events({
"change #schemaNameId": function(event, template){
var selectValue = template.$("#schemaNameId").val();
// console.log(selectValue +" is selected from dropdown - message logged in events");
Session.set("selectedSchema",selectValue);
console.log(Session.get("selectedSchema")+ " is session variable set - message logged in events");
}
});
帮手:
随着我不断更改下拉列表,下面的控制台日志也在不断更改,这又是一个好兆头,因为我的会话变量可以在帮助程序中访问。
Template.defaultTemplate.schemaNames({
schemaNames: function () {
console.log(Session.get("selectedSchema")+ " is session variable - message logged in defaultTemplate:schemaNames");
return Defaults.find({},{schemaName:1}).map(function(c) {return {schemaName : c.schemaName};
});
},
但是,对于下面这个函数,控制台日志根本不打印任何东西!这意味着控制永远不会达到这一点,即使所有这些都在同一个助手中 class.
schemaLabels: function() {
var selectedSchema = Session.get("schemaName");
console.log(Session.get("schemaName") +"is the selectedSchema - message logged in defaultTemplate:schemaLabels");
return Defaults.find({schemaName:selectedSchema},{_id:0,schemaName:0}).map(function(c) {return {label : c.label, value: c.value};});
}
});
更新:
经过进一步修改,我注意到会话变量在 schemaLabels 辅助函数中只在一开始就被调用了一次。它设置为未定义。之后,再也不会调用这个了。因此,无论我 select 是什么下拉菜单,table 都不会填充任何内容。
我不明白你为什么认为 schemaLabels
助手应该被调用。
您正在使用两个不同的会话变量(selectedSchema
和 schemaName
),因此这些助手是分开的。
因此,如果您希望每次更改 selectedSchema
(Session),调用 schemaLabels
助手,您必须像这样修改 schemaLabels:
schemaLabels: function() {
var foo = Session.get("selectedSchema");
var selectedSchema = Session.get("schemaName");
console.log(Session.get("schemaName") +"is the selectedSchema - message logged in defaultTemplate:schemaLabels");
return Defaults.find({schemaName:selectedSchema},{_id:0,schemaName:0}).map(function(c) {return {label : c.label, value: c.value};});
}