Sitecore 8 SPEAK:在JS文件中调用方法时出错

时间:2015-05-25 10:30:25

标签: jquery sitecore

当我点击按钮时,从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();

我们可以做些什么来避免这种情况?

3 个答案:

答案 0 :(得分:1)

如果这是您的SPEAK应用程序的PageCode,您可以更新JavaScript以扩展Sitecore.Definitions.App而不是Sitecore.Definitions.Models.ControlModel.extend吗?

EG。像这样定义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;});

答案 1 :(得分:1)

试试这个,



   define(["sitecore"], function (Sitecore) {
        var model = Sitecore.Definitions.Models.ControlModel.extend({
            initialize: function (options) {
                this._super();
                app = this;
            },
        products: function () {}
        });
    }




在按钮中点击键入:javascript:app.ProductSearch.product()

答案 2 :(得分:0)

尝试在视图定义中的product方法中调用this.model.product()而不是this.product()