如何有效地将相同的选项值分配给 Meteor 中的多个 Select 元素?
How can I efficiently assign the same option values to multiple Select elements in Meteor?
我有多个 Select 元素需要包含相同的值。而不是在每个 Select 这种类型中复制相同的 HTML:
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
...我想使用模板助手来提供这些值,例如:
HTML:
<select class="jobLocCount" id="date1Shift1JobLoc2Count" name="date1Shift1JobLoc2Count">
{{> jobLocCountVals}}
</select>
JS:
Template.tblScheduler.helpers({
jobLocCountVals: function() {
return '<option value="1">1</option>'+
'<option value="2">2</option>'+
'<option value="3">3</option>'+
'<option value="4">4</option>'+
'<option value="5">5</option>'+
'<option value="6">6</option>'+
'<option value="7">7</option>'+
'<option value="8">8</option>'+
'<option value="9">9</option>'+
'<option value="10">10</option>'
}
});
...或者直接把HTML中的option值赋值给这个类型的第一个Select,然后把剩下的都通过js赋值,类似(伪代码):
Template.tblScheduler.onRender({
$('#date1Shift1JobLoc2Count').Items = $('#date1Shift1JobLoc1Count').Items;
$('#date1Shift1JobLoc3Count').Items = $('#date1Shift1JobLoc1Count').Items;
. . .
});
我的问题是,哪种方法更好,更好的方法具体是如何实现的(以上只是比较牵强的伪代码)?
如果您想这样做,为什么不在模板助手中 return 一个对象数组(实际上是 Meteor 游标的工作原理),然后遍历它们?您可以对对象进行硬编码,但如果您愿意,也可以在 JS 中创建一个循环来为您执行此操作。
这是一个硬编码示例,因为您需要的选项值范围为 1-10:
JavaScript 模板助手
Template.yourTemplate.helpers({
values: function () {
return [{value: 1}, {value: 2}, {value: 3}, {value: 4}, {value: 5}, {value: 6},
{value: 7}, {value: 8}, {value: 9}, {value: 10}];
}
});
HTML 模板
<template name="yourTemplate">
<select id="whateverYouWant" class="whateverYouWant">
{{#each values}}
<option value="{{value}}">{{value}}</option>
{{/each}}
</select>
</template>
我选择这条路线是因为当你return Mongo 查询的结果时,它基本上就是 Meteor 正在做的事情,除了硬编码值,并利用 Meteor 的 {{#each}}
空格键语法。
作为一个额外的好处,如果你想让它成为一个全局模板助手,可用于任何模板,你可以这样做:
Template.registerHelper("selectValues", function() {
return [{value: 1}, {value: 2}, {value: 3}, {value: 4}, {value: 5}, {value: 6},
{value: 7}, {value: 8}, {value: 9}, {value: 10}];
});
我有多个 Select 元素需要包含相同的值。而不是在每个 Select 这种类型中复制相同的 HTML:
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
...我想使用模板助手来提供这些值,例如:
HTML:
<select class="jobLocCount" id="date1Shift1JobLoc2Count" name="date1Shift1JobLoc2Count">
{{> jobLocCountVals}}
</select>
JS:
Template.tblScheduler.helpers({
jobLocCountVals: function() {
return '<option value="1">1</option>'+
'<option value="2">2</option>'+
'<option value="3">3</option>'+
'<option value="4">4</option>'+
'<option value="5">5</option>'+
'<option value="6">6</option>'+
'<option value="7">7</option>'+
'<option value="8">8</option>'+
'<option value="9">9</option>'+
'<option value="10">10</option>'
}
});
...或者直接把HTML中的option值赋值给这个类型的第一个Select,然后把剩下的都通过js赋值,类似(伪代码):
Template.tblScheduler.onRender({
$('#date1Shift1JobLoc2Count').Items = $('#date1Shift1JobLoc1Count').Items;
$('#date1Shift1JobLoc3Count').Items = $('#date1Shift1JobLoc1Count').Items;
. . .
});
我的问题是,哪种方法更好,更好的方法具体是如何实现的(以上只是比较牵强的伪代码)?
如果您想这样做,为什么不在模板助手中 return 一个对象数组(实际上是 Meteor 游标的工作原理),然后遍历它们?您可以对对象进行硬编码,但如果您愿意,也可以在 JS 中创建一个循环来为您执行此操作。
这是一个硬编码示例,因为您需要的选项值范围为 1-10:
JavaScript 模板助手
Template.yourTemplate.helpers({
values: function () {
return [{value: 1}, {value: 2}, {value: 3}, {value: 4}, {value: 5}, {value: 6},
{value: 7}, {value: 8}, {value: 9}, {value: 10}];
}
});
HTML 模板
<template name="yourTemplate">
<select id="whateverYouWant" class="whateverYouWant">
{{#each values}}
<option value="{{value}}">{{value}}</option>
{{/each}}
</select>
</template>
我选择这条路线是因为当你return Mongo 查询的结果时,它基本上就是 Meteor 正在做的事情,除了硬编码值,并利用 Meteor 的 {{#each}}
空格键语法。
作为一个额外的好处,如果你想让它成为一个全局模板助手,可用于任何模板,你可以这样做:
Template.registerHelper("selectValues", function() {
return [{value: 1}, {value: 2}, {value: 3}, {value: 4}, {value: 5}, {value: 6},
{value: 7}, {value: 8}, {value: 9}, {value: 10}];
});