添加了按钮操作链接(Adding Link for Button Action)

2019-10-29 17:58发布

最近,我开始一个新的网站有撇号的CMS,并在项目的特点之一将被延长撇号的事件将有谁与每个事件相关的“注册”用户的列表。 我能到一个新的joinByArray列添加到撇号事件模块,以及编辑活动时,它工作正常。

现在,我想一个注册按钮添加到撇号事件的页面模块,使用户可以从每个事件的页面注册事件。 我现在有一个可用的工作API端点,这是我使用此代码创建的:

(在文件lib / modules目录/撇号事件 - 页/ index.js)

module.exports = {
    construct: function(self, options) {
        self.route('get', 'register', function(req, res) {
            // Validate things with the launder module
            var name = self.apos.launder.string(req.body.name);
            // Deliver a JSON response
            return res.send({ status: 'ok', moreInfo: 'something' });
        });
    }
};

该端点按预期工作,但我卡上添加一个按钮,一个链接到正确的操作在前端。 我创建了一个按钮,看起来是正确的show.html覆盖我创建,用下面的代码:

(在LIB /模块/撇号的事件的页面/视图/ show.html)

{{ buttons.minor('Register for Field Trip', { action: 'register' }) }}

我不知道我怎么可以添加一个链接到寄存器的操作。 我试图将此代码添加到与上述相同的index.js文件:

(在LIB /模块/撇号事件-页/ index.js)

self.registerEvent = function() {
    var res;
    self.api('register', {}, function(result) {
        res = results;
    });
};

var superBeforeShow = self.beforeShow;
self.beforeShow = function(callback) {
    self.link('register', self.registerEvent);
    return superBeforeShow(callback);
};

但是,当我访问活动页面,一个错误发生,说self.link不是一个函数。 我应该把链接代码的其他地方?

谢谢!

Answer 1:

我撇在P'unk大道的首席架构师。

首先,您遇到困难,因为你试图调用JavaScript的前端API等linkindex.js你的模块,它是后端的Node.js代码的文件。

您将需要一个推动always.js javascript文件浏览器。 您可以在模块的调用此index.js

self.pushAsset('script', 'always', { when: 'always' });

然后填充你的模块的public/js/always.js与前端代码文件。

其次, self.link你可能看代码真的只打算的东西是“在上下文中,”比如一个特定的对话框。 您正在寻找绑定到按钮上任意点击一个特定的数据属性。 对于这一点,你可以写:

apos.ui.link('register', 'event', function($el, _id) { ... }

在你always.js,这个代码将与一个名叫什么行动回应register-event

{{ buttons.minor('Register for Field Trip', { action: 'register-event' }) }}

但这只是写一个jQuery委派事件处理程序的便捷方式。 你也可以这样写:

$('body').on('click', '[data-register-event]', function() { ... })

你应该换你always.js代码在DOM就绪功能:

$(function() { ... })

至于调用self.api ,这是非常方便的,你可以看看继承apostrophe-context来访问它,但你也可以直接建立自己的URL并且调用我们的jsonCall从你的jQuery插件always.js

$.jsonCall('/modules/your-module-name/register',
  { ... data ... },
  function(result) { ... }
);

请查看教程建立一个接触的形式 ,其中包括如何推进的材料always.js从文件public/js你的模块文件夹中的资产等。

该教程还演示了使用自定义的撇号窗口小部件类型,以提供一个家,你的前端代码,我一般推荐的技术。 它允许您访问self.api等。



文章来源: Adding Link for Button Action