Knockout.js 使用击倒剑道组合框选择的选项
我在创造。我期望的是选择所选对象作为chosenticketcontainobject,而不是specsifict to属性。这是我使用asp.net razor的代码。 C代码: 我期望的是,当用户在ComboBox BankAccount中选择项时,chosenBankAccount应该包含一个来自“BankAccountSetupViewModel”的对象,该对象是由C代码生成的,使用敲除映射插件进行映射。Knockout.js 使用击倒剑道组合框选择的选项,knockout.js,kendo-ui,Knockout.js,Kendo Ui,我在创造。我期望的是选择所选对象作为chosenticketcontainobject,而不是specsifict to属性。这是我使用asp.net razor的代码。 C代码: 我期望的是,当用户在ComboBox BankAccount中选择项时,chosenBankAccount应该包含一个来自“BankAccountSetupViewModel”的对象,该对象是由C代码生成的,使用敲除映射插件进行映射。 欢迎使用任何方法。剑道组合框不支持选择整个对象。您可以指定dataValueFie
欢迎使用任何方法。剑道组合框不支持选择整个对象。您可以指定dataValueField以将值设置为对象的唯一键id。然后,可以创建一个ko.computed来表示选定对象。比如:
this.choices = ko.observableArray([
{ id: "1", name: "apple"},
{ id: "2", name: "orange"},
{ id: "3", name: "banana"}
]);
this.selectedId = ko.observable();
this.selectedChoice = ko.computed(function() {
var id = this.selectedId();
if (id) {
return ko.utils.arrayFirst(this.choices(), function(choice) {
return choice.id === id;
});
}
}, this);
此处示例:
<fieldset id="form-container" data-bind="with: formEditorSettlement">
<legend>Edit Detail</legend>
@Html.LabelFor(model => model.Amount)
<span style="margin-bottom: 20px;">
@Html.TextBoxFor(model => model.Currency.Code, new { @readonly = true, data_bind = "value: currency", @style = "width: 50px;" })
@Html.TextBoxFor(model => model.Amount, new { data_bind = "value: amount" })
</span>
<div class="cols-2">
<label class="cols-full">Bank Account</label><br />
<label>Bank</label>
<span>@(Html.Kendo().ComboBox().Name("BankAccount").Suggest(true).Filter(FilterType.Contains).DataTextField("Name").DataValueField("ID").BindTo(accountExample).HtmlAttributes(new { @class = "no-input", style = "width: 300px;", data_bind = "kendoComboBox: { data: $root.accounts, value: $root.chosenBankAccount, dataTextField: 'Bank', dataValueField: 'ID' }" }))</span>
<label>Account No.</label>
<span>@Html.TextBoxFor(model => model.BankAccount, new { @readonly = true, data_bind = "value: $root.chosenBankAccount.AccountName" })</span>
<label>Account Name</label>
<span>@Html.TextBox("BankAccountName", null, new { @readonly = true, data_bind = "value: bankAccountName" })</span>
</div>
</fieldset>
(function ($, ko, undefined) {
var viewModel = namespace('ViewModels.Activities');
viewModel.SettlementSplitObservable = new (function (defaultSettlementSplit, defaultAccounts) {
var root = this;
//add isChecked to all item
ko.utils.arrayForEach(defaultSettlementSplit, function (item) {
item.isChecked = ko.observable(false);
});
root.verifiedItems = ko.observableArray(defaultSettlementSplit);
root.lastAction = ko.observable('add');
root.maxAmount = ko.observable(@(Model.Splitted[0].Amount));
root.accounts = ko.mapping.fromJS(defaultAccounts);
root.chosenBankAccount = ko.observable();
root.formEditorSettlement = new (function () {
var self = this;
self.currency = ko.observable('@Model.Currency.Code');
self.amount = ko.observable(0);
self.bankNameBank = ko.observable('');
self.bankAccountNo = ko.observable('');
self.bankAccountName = ko.observable('');
self.isEditMode = ko.observable(false);
}.bind(this));
})(@Html.Raw(Json.Encode(Model.Splitted)),
@Html.Raw(Json.Encode(accountExample)));
})(jQuery, ko)
this.choices = ko.observableArray([
{ id: "1", name: "apple"},
{ id: "2", name: "orange"},
{ id: "3", name: "banana"}
]);
this.selectedId = ko.observable();
this.selectedChoice = ko.computed(function() {
var id = this.selectedId();
if (id) {
return ko.utils.arrayFirst(this.choices(), function(choice) {
return choice.id === id;
});
}
}, this);