我有一个车把模板显示为outlet
. 当我第一次打开路线时,表格会显示预期的数据。但是,每当我从另一条路线过渡到这条路线时,使用tranisitionToRoute
,元素都不会添加到 DOM 中。
我已经在模板中添加了日志记录,所以我知道数据在那里并且正在处理模板,但是没有元素被添加到 DOM 中。这是顶级模板:
{{hbsdebug "xxxx"}}
{{log this}}
{{log this.content}}
<article>
<form class="form-horizontal">
<fieldset>
<div id="legend" class="">
<legend class="">{{capitalize pluralHuman}} <span class="badge">{{entriesLength}} records</span>
<div class="pull-right">
{{#if allowDeleteAll}}
<a {{action destroyAllRecords}} class="btn btn-primary"><i class="icon-remove"></i> Delete All {{capitalize pluralHuman}}</a>
{{/if}}
{{#linkTo newRoute class="btn btn-primary"}}<i class="icon-plus"></i> Add {{capitalize singularHuman}}{{/linkTo}}
</div>
</legend>
</div>
{{view SettingsApp.MessageTrayView id="message-tray-view"}}
{{#if isUpdating}}
{{mylog "Loading data!!!" null}}
<div style="text-align:center;"><br/><br/><img src="images/circular_loader.gif" /><br/><br/>Loading the list of {{pluralHuman}}...</div>
{{else}}
{{#if entriesLength}}
{{mylog "Showing outlet > entriesLength >" entriesLength}}
{{outlet}}
{{else}}
{{mylog "Showing partial empty_list" null}}
{{partial "empty_list"}}
{{/if}}
{{/if}}
</fieldset>
</form>
</article>
这是我的outlet
:
{{hbsdebug "services/index"}}
{{mylog "services/index > this" this }}
{{mylog "services/index > content" content }}
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Startnode</th>
<th>Nextnode</th>
<th>JumpIfBusy</th>
<th>JumpIfNoAnswer</th>
<th style="width: 36px;"></th>
</tr>
</thead>
<tbody>
{{#each model}}
{{log this}}
{{mylog "services/index.each > this" this }}
<tr class="odd-even">
<td>{{#linkTo controller.showRoute this}}{{grayOutIfUndef2 properties.name formattedName "(undefined)"}}{{/linkTo}}</td>
<td>{{grayOutIfUndef formattedStartnode}}</td>
<td>{{grayOutIfUndef formattedNextnode}}</td>
<td>{{grayOutIfUndef formattedJumpIfBusy}}</td>
<td>{{grayOutIfUndef formattedJumpIfNoAnswer}}</td>
<td>
<a {{action startEditing this}}><i class="icon-pencil"></i><a/>
<a {{action destroyRecord this}}><i class="icon-remove"></i><a/>
</td>
</tr>
{{/each}}
</tbody>
</table>
(助手hbsdebug
,log
并且mylog
只是在控制台中看到正在处理模板。我很困惑,以至于我正在使用不同的方法进行日志记录)
这是我“转换回”表格的模板:
<form class="form-horizontal">
<fieldset>
<div id="legend" class="">
<p class="form-action-title">{{grayOutIfUndef formattedName}}</p>
</div>
<div class="form-content-wrapper-fixed">
{{ propPartial "showPartial" }}
</div>
<div class="form-actions">
<a class="btn btn-primary" {{action startEditing this}}><i class="icon-pencil"></i> Edit</a>
<a class="btn" {{action backToList}}><i class="icon-th-list"></i> Back to list</a>
<a class="btn pull-right" {{action destroyRecord this}}><i class="icon-remove"></i> Remove</a>
</div>
</fieldset>
</form>
这是backToList
行动:
backToList: function () {
console.log('backToList > indexRoute=%o', this.indexRoute);
this.transitionToRoute(this.indexRoute);
}
字符串在哪里indexRoute
,即services.index
.
问题可能是什么?什么可能阻止 ember 正确更新 DOM?
更新
由于我正在使用{{if isUpdating}}
(在从后端请求数据时显示微调器)来保护插座,因此我已经验证了在某些情况下会出现问题。有两种可能的“渲染序列”:
- 索引路由被选中
- 从后端请求数据(
isUpdating
->true
) - 显示微调器
- 接收到数据 (
isUpdating
->false
) - 遵循出口路径(“显示出口”)
- 处理出口,并更新 DOM
这工作正常。但是在重新选择索引路由时,顺序发生了变化:
- 索引路由被选中
- 请求数据 (
isUpdating
->true
) - 出口被处理(即使数据
isUpdating
!!) - 然后 ember 意识到应该遵循另一条路径,并且显示了微调器
- 接收到数据 (
isUpdating
->false
) - 现在遵循模板中的“显示出口”路径,但
outlet
并未真正处理,因此不再更新 DOM。
所以我想重要的问题是:
- (第 3 步)即使
isUpdating
是真的出口,为什么还要处理? - (第 6 步)为什么 ember 告诉我正在显示出口,但它并没有真正处理出口?