为什么我不能引用父对象?

Why can't I refer to parent object?

我 运行 遇到了这个奇怪但简单的问题。我正在循环 project.systems,每个系统都可以通过模态形式进行编辑,模态形式包含在名为“_editSystem”的部分中

 {{#each project.systems}}
          <tbody>
          <td class="center"><h6>{{number}}</h6></td>
          <td class="center"><h6>{{name}}</h6></td>

          <td class="center">
          <form class="" action="{{../project._id}}/{{_id}}/delete-system" method="POST" id="delete-system-form">
          <input type="hidden" name="_method" value="PUT">
          <button type="submit" class="btn btn-sm btn-danger">
          <i class="fas fa-trash"></i> Delete </button>
          </form>
          <button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#editSystem-{{_id}}">
           <i class="fas fa-edit"></i> Edit </button>
          {{> _editSystem}}
          </a>
          </td>
          </tr>

部分看起来像这样:

<div class="modal" id="editSystem-{{_id}}">
<div class="modal-dialog">
<div class="modal-content">
  <div class="modal-header">
    <h4 class="modal-title">Edit system</h4>
  </div>

  <!-- Modal body -->
    <div class="modal-body">
    <form action="{{../project._id}}/{{_id}}/edit-system" method="POST">
    <input type="hidden" name="_method" value="PUT">

        <div class="row">
                <div class="input-group">
                <div class="input-group-prepend">
                    <span class="input-group-text">System number</span>
                </div>
                <input type="text" class="form-control" name="number" id="number" value="{{number}}" placeholder="Enter system number">
                </div>
        </div>
        
        <div class="row">
                <div class="input-group pt-3">
                <div class="input-group-prepend">
                    <span class="input-group-text">System name</span>
                </div>
                <input type="text" class="form-control" name="name" id="name" value="{{name}}" placeholder="Enter system name">
                </div>
        </div>

    </div>
    

  <!-- Modal footer -->
  <div class="modal-footer">
    <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
    <input type="submit" value="Save" class="btn btn-primary">
  </div>
</form>

</div>

问题是我无法引用 {{../project._id}}。提交路径后如下所示:

http://localhost:3000/601ffda3d3ff7c3ec0ef891f/edit-system

而正确的路径应该是这样的:

http://localhost:3000/project/60185936bb697e1b9c7c6cb9/601ffda3d3ff7c3ec0ef891f/edit-system

基本上我似乎无法引用父(项目)id,而我的“删除”按钮工作得很好...... 有谁知道我做错了什么?

我不认为你做错了什么。

在不深入研究 Handlebars 源代码的情况下,我认为可以安全地假设一个部分无法访问与调用它的模板相同的上下文堆栈。 Partial Parameters 的 Handlebars 文档指出此类参数“对于将父上下文中的数据公开给部分内容特别有用”这一事实进一步强化了这一假设。

所以您似乎需要将您的项目 ID 值作为参数传递给您的部分,如:

{{> _editSystem projectId=../project._id}}

您的部分将引用 projectId 参数:

{{projectId}}/{{_id}}/edit-system

我创建了一个fiddle供您参考。