让淘汰用户关闭模型并再次打开它

时间:2012-07-31 23:28:06

标签: javascript knockout.js

我是淘汰赛的新手,不知道我是否正确地做到这一点

我有一个购物车编辑器,就像淘汰赛实例一样,除了我想拥有更高级的产品选择器这一事实。我的产品实际上有两种类型的代码,用户必须能够输入其中一种,并在购物车上获得产品的完整详细信息。所以我会为每种代码提供两个输入,当用户输入任何代码时,我应该进行ajax调用并加载产品信息(包括productId,productName,the_other_code等)。

我通过订阅code1和amp;来尝试这个。 code2 - 在从服务器获取数据后进行ajax调用并设置模型的数据,但它会进行一种递归事件(subscribe)触发,从而重复调用ajax方法。我相信如果可以在{{1}期间设置淘汰订阅方法,那么递归行为就不会发生。

SetData

任何帮助都会被大大诟病!

1 个答案:

答案 0 :(得分:2)

一个简单的布尔标志就足够了。输入SetData时设置为true,退出时设置为false,如果设置了标志,则在订阅回调中立即返回:

    var updatingData = false;

    self.SetData = function (itemdata) {
        updatingData = true;
        self.ProductId (itemdata ? itemdata.ProductId : null);
        self.Code1(itemdata ? itemdata.Code1 : null);
        self.Code2(itemdata ? itemdata.Code2 : null);
        self.Title(itemdata ? itemdata.Title : null);
        updatingData = false;
    };

    self.SetData(data);

    self.Code1.subscribe(function (value) 
    {
        if (updatingData) return;
        var productInfo = Ajax_GetPartDataWithCode1(value);
        self.SetData(productInfo);
    });

    self.Code2.subscribe(function (value) {
        if (updatingData) return;
        var productInfo = Ajax_GetPartDataWithCode2(value);
        self.SetData(productInfo);
    });