无法输出由Meteor中的代码生成的帮助器属性

无法输出由Meteor中的代码生成的帮助器属性,meteor,meteor-blaze,Meteor,Meteor Blaze,我正在尝试创建一个包含一些省名的下拉列表。我还有一个下拉列表,列出了用户选择的省份的城市。 正如您在助手中看到的,我有省份列表,我可以访问它们并在下拉列表中列出它们。现在列出这些城市,这就是我想要做的。。。我有一个名为“city”的助手,默认为空。在事件中,我在provinceID上创建了一个更改事件。。。每当用户更改下拉列表的选项时,此事件将运行。。。使用该开关,例如,如果所选城市为“Tehran”,则city helper由cityHolder数组填充。问题是它没有列在下拉列表中。 这是代码

我正在尝试创建一个包含一些省名的下拉列表。我还有一个下拉列表,列出了用户选择的省份的城市。 正如您在助手中看到的,我有省份列表,我可以访问它们并在下拉列表中列出它们。现在列出这些城市,这就是我想要做的。。。我有一个名为“city”的助手,默认为空。在事件中,我在provinceID上创建了一个更改事件。。。每当用户更改下拉列表的选项时,此事件将运行。。。使用该开关,例如,如果所选城市为“Tehran”,则city helper由cityHolder数组填充。问题是它没有列在下拉列表中。 这是代码的一部分 在main.js文件中:

Template.body.helpers({
/* #### LIST OF IRAN PROVINCES #### */
province: [
    {provinceName: 'Select the Province...', callingCode: ''},
    {provinceName: 'Tehran', callingCode: '021'},
    {provinceName: 'Yazd', callingCode: '352'},
    {provinceName: 'Gilan', callingCode: '131'}
],
city: [],
});

Template.body.events({
   'change #provinceID'(event, template)
{
    // ** Holds the value of the province dropdown **
    var provinceInputValue = document.getElementById('provinceID').value;
    // ** Checks which province has been selected **
    switch (provinceInputValue) {

        // #### 1. TEHRAN ####
        case 'Tehran':

            // ** List of Tehran cities **
            cityHolder = [
                {cityName: 'Tehran'},
                {cityName: 'Robat Karim'},
            ];
                for (var a = 0; a < cityHolder.length; a++) {
                Template.body.__helpers[" city"][a] = cityHolder[a];
            }
            break;
这是main.html文件:

<body>
<select id="provinceID">
    {{#each province}}
        {{> provinceTemplate}}
    {{/each}}
</select>
<select id="cityID">
    {{#each city}}
        {{> cityTemplate}}
    {{/each}}
</select>
</body>

<template name="provinceTemplate">
    <option value="{{provinceName}}" label="{{provinceName}}"></option>
</template>


<template name="cityTemplate">
    <option value="{{cityName}}" label="{{cityName}}"></option>
</template>

级联菜单的一种常见模式是在主菜单更改时设置会话变量,然后根据该变量反应性地填充从属菜单

Template.body.helpers({
  province(){
    return
      [
        {provinceName: 'Select the Province...', callingCode: ''},
        {provinceName: 'Tehran', callingCode: '021'},
        {provinceName: 'Yazd', callingCode: '352'},
        {provinceName: 'Gilan', callingCode: '131'}
      ];
  },
  city(){
    switch ( Session.get('provinceInputValue') ) {
      case 'Tehran':
        cityHolder = [
          {cityName: 'Tehran'},
          {cityName: 'Robat Karim'},
        ];
        break;
    }
    return cityHolder;
  }
});

Template.body.events({
  'change #provinceID'(event, template){
    let provinceElement = document.getElementById('provinceID');
    if ( provinceElement) Session.set('provinceInputValue',provinceElement.value);
  }
});

关键是会话是被动的,因此当会话变量的值被更新时,依赖代码在这种情况下,返回城市列表的函数将被强制更新。

级联菜单的一种常见模式是,在主菜单更改时设置会话变量,然后被动地填充依赖菜单在那上面

Template.body.helpers({
  province(){
    return
      [
        {provinceName: 'Select the Province...', callingCode: ''},
        {provinceName: 'Tehran', callingCode: '021'},
        {provinceName: 'Yazd', callingCode: '352'},
        {provinceName: 'Gilan', callingCode: '131'}
      ];
  },
  city(){
    switch ( Session.get('provinceInputValue') ) {
      case 'Tehran':
        cityHolder = [
          {cityName: 'Tehran'},
          {cityName: 'Robat Karim'},
        ];
        break;
    }
    return cityHolder;
  }
});

Template.body.events({
  'change #provinceID'(event, template){
    let provinceElement = document.getElementById('provinceID');
    if ( provinceElement) Session.set('provinceInputValue',provinceElement.value);
  }
});

关键是会话是被动的,因此当会话变量的值被更新时,依赖代码在这种情况下,返回城市列表的函数将被强制更新。

那么模板声明将如何更改@模板帮助程序中的MichelFloyd异常:TypeError:无法通过更改代码读取null的属性“value”。。。这就是我得到的。。。为什么会这样?var provinceInputValue=document.getElementByIdprovinceID.value@MichelFloyd这是有线的因为当我运行文档时。。。在控制台中,它正在工作!这不在我的代码中。当您在控制台中运行时,将加载DOM,但不是在代码首次运行时加载。看我是如何在下面第三行中防范的。是的。。。它开始工作了。。。我真的很感谢你花时间@MichelFloyd那么模板声明将如何改变@模板帮助程序中的MichelFloyd异常:TypeError:无法通过更改代码读取null的属性“value”。。。这就是我得到的。。。为什么会这样?var provinceInputValue=document.getElementByIdprovinceID.value@MichelFloyd这是有线的因为当我运行文档时。。。在控制台中,它正在工作!这不在我的代码中。当您在控制台中运行时,将加载DOM,但不是在代码首次运行时加载。看我是如何在下面第三行中防范的。是的。。。它开始工作了。。。我真的很感谢你的时间@MichelFloyd