J'ai un site ASP.NET MVC et j'essaye de faire fonctionner knockout-mvc avec.knockoutmvc - impossible d'analyser les liaisons
J'ai créé un modèle Voir dans le code C# appelé Refund
qui contient entre autres un type Voucher
appelé Voucher
et un List<Country>
appelé Countries
. Bon a une variable de type int
appelé VoucherNumber
Ce modèle Voir passe dans une vue fortement défini Refund\Index
Je suis en train d'obtenir KO-mvc pour lier les valeurs Refund.Voucher.VoucherNumber à une zone de texte, et les valeurs dans Refund.Countries
dans une liste déroulante. Sur le contrôleur, j'ai codé en dur les valeurs de Voucher.Vouchernumber et ajouté deux pays à la liste Country.
Voici mon code Voir:
@using Resources
@using PerpetuumSoft.Knockout
@model MVC.Models.RefundViewModel
@{
var ko = Html.CreateKnockoutContext();
}
<div id="refundformcontainer">
<div id="headersection">
<div id="pagetitlecontainer">@Language.RefundVouchers</div>
<div id="helpercontainer">
<label id="lblhelper">To begin enter a voucher number or scan a barcode</label>
</div>
</div>
<div id="vouchercontainer">
<div id="voucherdetailscontainer">
<h5>@Language.VoucherDetails</h5>
<div id="vouchernumbercontainer" class="initialvoucherfield">
@Html.LabelFor(x=>x.Voucher.VoucherNumber)
@ko.Html.TextBox(x=>x.Voucher.VoucherNumber)
</div>
<div id="countrycontainer" class="initialvoucherfield">
@Html.LabelFor(x=>x.Voucher.Country)
<select ko.Bind.Options(x=>x.Countries).OptionsText("Name").OptionsValue("CountryId").Value(x=>x.Voucher.CountryId) ></select>
</div>
</div>
</div>
</div>
@ko.Apply(Model);
Lorsque la page se charge, ni les contrôles sont liés à.
Quand je regarde la source généré le code suivant est généré
<script type="text/javascript">
var viewModelJs = {"Refund":null,"Voucher":{"VoucherId":0,"VoucherNumber":123456789,"Country":null,"CountryId":0,"Retailer":null,"RetailerId":0,"PurchaseDate":"0001-01-01T00:00:00","CustomsStampDate":null,"InvoiceNumber":"","LineItems":[],"TotalPurchasePrice":0.0},"Countries":[{"CountryId":380,"Name":"Italy"},{"CountryId":724,"Name":"Spain"}]};
var viewModel = ko.mapping.fromJS(viewModelJs);
ko.applyBindings(viewModel);
</script>
knock-out-2.2.0.js et knockout.mapping-latest.js sont tous deux inclus dans la page
L'erreur Je reçois est
0x800a139e - JavaScript runtine error: Unable to parse bindings
Message: [Object Error]
Bindings value: Voucher().VoucherNumber
J'ai alors changé le modèle de remboursement View il avait une propriété VoucherNumber et avait la référence textbox ce lieu de la propriété Voucher.VoucherNumber
@ko.Html.TextBox(x=>x.VoucherNumber)
Quand je courais ce que j'ai eu le même incapable d'analyser l'erreur de liaisons, mais cette fois pour le pays
Bindings value: options : Countries, optonsText : Name, optionsValue : CountryId
Est-ce que quelqu'un a une idée de ce qui est la cause?
knock-out-mvc dispose actuellement d'un bug de sorte que les propriétés imbriquées ('x.Voucher.VoucherNumber' par exemple) ne sont pas correctement wroking voir ce double? question pour une solution de contournement: http://stackoverflow.com/questions/17918628/bind-data-with-nested-object-using-knockout-mvc-in-mvc-4 – nemesv
Merci, c'est un assez mauvais bug! Votre lien m'a conduit à lire un peu plus et trouver ce http://stackoverflow.com/questions/11618042/is-there-a-reason-i-would-use-knockout-mvc-instead-of-knockout- js - pas si sûr que je vais l'utiliser maintenant! – Neil
Je ne vois pas knockout-mvc aussi mauvais que Tyrsius dans la question liée, il a quelques problèmes et limitations, mais en le comparant aux webforms est trop fort. Si vous connaissez knock-out et de toute façon en utilisant ASP.NET MVC et vous aimez avoir des vues typées storngly et kncockout expressions de liaison de données et vous savez ce que vous faites alors ce n'est pas si mal. – nemesv