【发布时间】:2017-04-24 17:17:31
【问题描述】:
我正在尝试使用从 Vue 对象加载的选项来渲染一个选择标签,但是,正如您所看到的那样,它看起来有些问题:
现在这是选择标签的标记:
<div class="form-group ui-model">
@Html.LabelFor(m => m.SenderWalletId, new { @class = "control-label col-sm-2" })
<div class="col-sm-10">
<select class="form-control" v-model="selectedSenderWallet">
<option v-if="!walletsLoaded" disabled>Loading wallets...</option>
<option v-if="walletsLoaded" v-for="wallet in wallets" v-bind:value="wallet.id">{{ wallet.description }}</option>
</select>
@Html.HiddenFor(m => m.SenderWalletId, new { }, new { value = "selectedSenderWallet" })
@Html.ValidationMessageFor(m => m.SenderWalletId)
</div>
</div>
这是用于创建 Vue 应用程序的脚本,以及用于处理钱包的 SignalR(从我的存储库成功加载钱包后,集线器会调用 setWallets):
<script>
var walletLinkText = Vue.extend({
props: ['wallet'],
template: '<span>{{ linkText }}</span>',
computed: {
linkText: function () {
return this.wallet.description + ' (' + this.wallet.currentAmountFormatted + ')';
}
}
});
var uiModel = new Vue({
el: '.ui-model',
data: {
wallets: [],
walletsLoaded: false
},
components: {
'wallet-link-text': walletLinkText
}
});
$(function() {
var walletsHubProxy = $.connection.walletsHub;
walletsHubProxy.client.updateWallet = function (...) {
...
};
walletsHubProxy.client.setWallets = function (currentWallets) {
uiModel.wallets = currentWallets;
uiModel.walletsLoaded = true;
};
$.connection.hub.start().done(function() {
walletsHubProxy.server.getWallets();
});
});
</script>
问题是我确定钱包已正确加载,正如您在菜单中看到的那样:
这是上面的 html 标记:
<ul class="nav navbar-nav ui-model">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Wallets <span class="caret"></span></a>
<ul class="dropdown-menu">
<li v-if="!walletsLoaded"><a><i class="fa fa-spinner fa-pulse"></i> Loading...</a></li>
<li v-if="walletsLoaded && !wallets.length"><a>No wallets.</a></li>
<li v-if="walletsLoaded" v-for="wallet in wallets">
<a v-bind:href="'@Url.Content(string.Format("~/Wallets/"))' + wallet.id">
<wallet-link-text :wallet="wallet"></wallet-link-text>
</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="@Url.Action("Add", "Wallets")"><i class="fa fa-fw fa-edit"></i> Add new</a></li>
</ul>
</li>
</ul>
那么我哪里错了?我觉得我被一些非常简单的事情困住了。
【问题讨论】:
-
我不明白问题出在哪里。最后的屏幕截图似乎表明一切正常。那么第一个屏幕截图的情况何时/如何发生?通常,当出现错误并且模板不是由 Vue 编译时,Vue 应用程序看起来像这样。看看你的控制台。
-
问题出在第一个屏幕截图中:根本没有呈现选项。我发布了其他屏幕截图来支持这样一个事实,即使用相同的 Vue 应用程序正确呈现菜单而不是选择标签。并且控制台没有显示任何内容(是的,我使用的是开发版)。
-
尝试在第二个选项中使用
v-else而不是v-if="walletsLoaded"。 -
我已经尝试移除条件渲染,甚至尝试了v-else,但结果还是一样。问题肯定不在条件渲染上。
标签: javascript jquery asp.net-mvc mvvm vue.js