如何将Knockout JS attr绑定值作为变量传递给ajax post方法

时间:2013-01-23 10:59:05

标签: knockout.js

我的页面中有2个淘汰视图模型。我想将我的第一个视图模型的值发送到ajax帖子,该帖子获取数据并根据我从第一个视图模型传递的值将其添加到我的第二个视图模型中。

我想要做的是将订单ID作为变量传递给我的第二个Ajax帖子,以便我可以获取特定订单号的订单详细信息。

我数据绑定这样的标签:

<a data-bind="attr: { href: Url, title: Detail }, text: OrderNumber"></a>

以下是First ViewModel的一部分:

      var OrderDS = function (data) {
      var self = this;
      self.OrderNumber = ko.observable(data.OrderNumber);
      self.Url = ko.observable("#");
      self.Detail = ko.observable("Product Details For This Order");
     }

我想将Observable OrderNumber作为变量传递给我的辅助Ajax Post:

 $.ajax({
            url: "AccountsReceivible.aspx/GetOrderDetails",
            data: '{}', //How Do I ADD the Selected Value Here???
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "JSON",
            timeout: 10000,
            success: function (Result) {
                var MappedDetail =
              $.map(Result.d,
             function (item) {
                 return new OrderDetailDS(item);
             }
               );
                self.OrderDetail(MappedDetail);

            },
            error: function (xhr, status) {
                alert(status + " - " + xhr.responseText);
            }
        });

1 个答案:

答案 0 :(得分:1)

您不必将JSON编写为字符串,只需提供一个真正的JS对象:

data : { orderNumber : self.OrderNumber() }

(假设self是视图模型)

编辑:

对于视图模型之间的关联,您必须关心自己。在你的情况下:

var OrderDetailViewModel = function (OrderDetail) {
    var self = this;
    var orderViewModel = OrderViewmodel;

现在在我的第一个代码段中将self替换为orderViewModel