我是淘汰赛的新手,不知道我是否正确地做到这一点
我有一个购物车编辑器,就像淘汰赛实例一样,除了我想拥有更高级的产品选择器这一事实。我的产品实际上有两种类型的代码,用户必须能够输入其中一种,并在购物车上获得产品的完整详细信息。所以我会为每种代码提供两个输入,当用户输入任何代码时,我应该进行ajax调用并加载产品信息(包括productId,productName,the_other_code等)。
我通过订阅code1和amp;来尝试这个。 code2 - 在从服务器获取数据后进行ajax调用并设置模型的数据,但它会进行一种递归事件(subscribe)触发,从而重复调用ajax方法。我相信如果可以在{{1}期间设置淘汰订阅方法,那么递归行为就不会发生。
SetData
任何帮助都会被大大诟病!
答案 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);
});