使用knockout访问viewModel属性的值?

时间:2014-08-05 21:58:57

标签: javascript jquery asp.net-mvc-4 knockout.js

我有三种不同的Car Fuel类型页面,它们呈现部分视图以在所有三个页面中加载常用功能。我正在使用knockout js在该局部视图中执行一些动态计算。

因此,我的每个Fuel类型页面都有一个BeginForm,每个ID都不同,因此DieselForm,PetrolForm,ElectricForm。燃料类型在我的viewModel中设置,并存储在隐藏字段的公共部分视图中 - @Html.HiddenFor(model => model.FuelType)

以下是部分视图中的一些淘汰赛:

    var mvcModel = @Html.Raw(Json.Encode(Model));
    var viewModel = ko.mapping.fromJS(mvcModel);


    var calculateTotal = function() {

        var form = $('#DieselContent form');
        if (!form.valid()) return;

        var formData = form.serialize();

      //ajax post to server method removed for brevity

有没有办法可以从viewModel属性中提取FuelType值,然后根据设置的FuelType动态更改表单var - 即 - 它应该是var form = $('#DieselContent form');var form = $('#PetrolContent form');或{ {1}}

我尝试使用var fuelType = viewModel.FuelType.val();但是这会引发一个未定义的错误。

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现您想要的结果,因此您选择的结果取决于架构决策。如果您只是严格引用ViewModel,那么您可以使用

选择表单
 var form = $('#' + viewModel.FuelType() + 'Content form');

但是,在这种情况下,CalculateTotal引用一个表单(表示的一部分),因此它似乎并不真正与ViewModel严格关联。因此,在这种情况下,我只想获得从MVC模型中选择的表单。即

var calculateTotal = function(){

    var form = $('@String.Format("#{0}Content form", Model.FuelType)');
    if (!form.valid()) return;

    var formData = form.serialize();