Sitecore 8 SPEAK:在JS文件中调用方法时出错
当我点击按钮时从Sitecore SPEAK应用程序调用JS文件中的方法时,我收到以下错误消息:
TypeError:this.product不是函数this.product()
this.product()
是函数名:
define(["sitecore"], function (Sitecore) { var model = Sitecore.Definitions.Models.ControlModel.extend({ initialize: function (options) { this._super(); }, products: function () { var input = this.get("input"); $.ajax({ url: "/api/sitecore/Product/Find", type: "POST", data: { input: input }, context: this, success: function (data) { this.set("output", data); } }); }, product: function () { var input2 = this.get("input2"); $.ajax({ url: "/api/sitecore/Product/FindSingle", type: "POST", data: { input2: input2 }, context: this, success: function (data) { this.set("output2", data); this.set("output3", data.TitleS); } }); return null; }, }); var view = Sitecore.Definitions.Views.ControlView.extend({ initialize: function (options) { this._super(); }, product: function () { this.product(); }
});
Sitecore.Factories.createComponent("ProductSearch", model, view, ".sc-ProductSearch");
});
从SPEAK Button.Click事件调用上述方法为: javascript:app.product();
我们可以做些什么来避免这种情况?
如果这是您的SPEAK应用程序的PageCode,您可以更新JavaScript以扩展Sitecore.Definitions.App而不是Sitecore.Definitions.Models.ControlModel.extend吗?
例如。 像这样定义SPEAK应用程序。
define(["sitecore", "jquery", "underscore"], function (Sitecore, $, _) { var SpeakExample = Sitecore.Definitions.App.extend({initialize: function (options) { }, products: function () { var input = this.get("input"); $.ajax({ url: "/api/sitecore/Product/Find", type: "POST", data: { input: input }, context: this, success: function (data) { this.set("output", data); } }); }, product: function () { var input2 = this.get("input2"); $.ajax({ url: "/api/sitecore/Product/FindSingle", type: "POST", data: { input2: input2 }, context: this, success: function (data) { this.set("output2", data); this.set("output3", data.TitleS); } }); return null; },return SpeakExample;});
试试这个,
define(["sitecore"], function (Sitecore) { var model = Sitecore.Definitions.Models.ControlModel.extend({ initialize: function (options) { this._super(); app = this; }, products: function () {} }); }
尝试在视图定义中的product方法中调用this.model.product()
而不是this.product()
。