标签: callback

如何在rails STI派生模型中禁用验证和回调?

给定一个模型

class BaseModel < ActiveRecord::Base
  validates_presence_of :parent_id
  before_save :frobnicate_widgets
end
Run Code Online (Sandbox Code Playgroud)

和派生模型(底层数据库表有一个type字段 - 这是简单的rails STI)

class DerivedModel < BaseModel
end
Run Code Online (Sandbox Code Playgroud)

DerivedModel将以良好的OO方式继承所有的行为BaseModel,包括validates_presence_of :parent_id.我想关闭验证DerivedModel,并防止回调方法被触发,最好不要修改或以其他方式破坏BaseModel

什么是最简单,最强大的方法?

validation ruby-on-rails callback single-table-inheritance

19
推荐指数
3
解决办法
1万
查看次数

使用模板返回值.如何处理无效返回?

我有用于存储回调函数的结构,如下所示:

template<class T>
struct CommandGlobal : CommandBase
{
    typedef boost::function<T ()> Command;
    Command comm;

    virtual T Execute() const
    {
        if(comm)
            return comm();
        return NULL;
    }
};
Run Code Online (Sandbox Code Playgroud)

看起来它应该工作正常,除非T是无效的,因为Execute函数想要返回一个值..

这个问题的最佳解决方案是什么?

谢谢!

c++ templates callback

19
推荐指数
1
解决办法
8092
查看次数

从回调中调用javascript对象方法

MyClass在用户脚本中定义以下及其方法:

function MyClass() {
    this.myCallback = function() {
        alert("MyClass.myCallback()");
    };

    this.startRequest = function() {
        GM_xmlhttpRequest({
            'method': 'GET',
            'url': "http://www.google.com/",
            'onload': function (xhr) {
                myClassInstance.myCallback();
            }
        });
    };
}

var myClassInstance = new MyClass();
myClassInstance.startRequest();
Run Code Online (Sandbox Code Playgroud)

此脚本有效,GM_xmlhttpRequest完成后将myCallback()调用该方法.

但是,它只能起作用,因为onload回调是指全局变量myClassInstance.如果我将onload回调更新为:

'onload': function (xhr) {
    this.myCallback();
}
Run Code Online (Sandbox Code Playgroud)

然后我得到(Chrome)错误:

未捕获的TypeError:Object [object DOMWindow]没有方法'myCallback'.

似乎this正在错误的背景下进行评估.

有没有办法调用myCallback()方法myClassInstance而不必求助于使用全局变量?

javascript callback javascript-objects

19
推荐指数
2
解决办法
2万
查看次数

目标C - 如何实现自定义回调方法但强制执行特定参数?

在我的应用程序中,我有一个自定义的UITableViewCell子类,在按下时会弹出一个选择器.从现在开始,我将引用这个类,因为PickerCell. 我在同一个中使用了几个PickerCell实例UITableView.

我不希望单元格响应选择器中的行选择,因为它不是一个好的MVC.相反,我希望ViewController为单元格提供一个回调,该回调将在选择行时调用.

最明显的方法是创建一个类似的协议PickerCellDelegate,视图控制器将自己传递给每个单元格.

我对这种方法的问题是,由于我有几个PickerCells,我在ViewController中的协议实现必须区分每个单元:

-(void) pickerCell : (PickerCell *) sender 
      didSelectRow : (NSInteger) row 
       inComponent : (NSInteger) component
{
    if (sender == X)
    // Something
    else if (sender == Y)
    // Something else...
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

而且我讨厌这种编码风格...

相反,我真的想要一种允许ViewController给它自己的回调的机制.

我可以允许PickerCell接受" onRowSelectedSelector",但是如何确保这个选择器的格式符合我的要求?(参数数量最重要)

更好的是,我想给Picker单元格一个来执行选择,因为我知道可以使用特定参数定义块.此外,不需要传递"目标"对象.

那我该怎么做呢?

谢谢!

oop objective-c callback ios objective-c-blocks

19
推荐指数
1
解决办法
1万
查看次数

Facebook喜欢和分享回调按钮

我有一个网页,我在其中放置了一个类似于Facebook的共享按钮,并且还存在相应的javascript回调函数.

现在问题是,javascript回调仅在用户"喜欢"时触发,并且在按下"共享"按钮时似乎不会触发.

就像我需要在每次他/她共享链接时奖励用户.而对于"喜欢",用户只能喜欢链接一次(不考虑不喜欢/重新喜欢).

我知道不推荐使用"共享"按钮.但Facebook现在提供了一个带有类似按钮的分享按钮.资料来源:https://developers.facebook.com/docs/plugins/like-button/

有没有办法从这个共享按钮触发这个回调方法?

这是我的代码:

我的HTML中BODY标记开头的代码: -

<div id="fb-root"></div>

<script>
    window.fbAsyncInit = function() {
    FB.init({
        appId: ' My App ID ',
        status: true,
        cookie: true,
        xfbml: true,
        oauth: true
    });
    FB.Event.subscribe('edge.create', function(response) {
        alert('You liked the URL: ' + response);

      });
};
(function(d) {
    var js, id = 'facebook-jssdk';
    if (d.getElementById(id)) {
        return;
    }
    js = d.createElement('script');
    js.id = id;
    js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementsByTagName('head')[0].appendChild(js);
}(document));

        </script>
Run Code Online (Sandbox Code Playgroud)

用于显示Like&Share按钮的代码: -

<div class="fb-like" data-href=" My URL …
Run Code Online (Sandbox Code Playgroud)

javascript facebook callback facebook-like facebook-javascript-sdk

19
推荐指数
2
解决办法
4万
查看次数

谷歌reCAPTCHA数据回调无法正常工作

我已经建立了一个电子邮件简报注册表格,从我的网站发布到mailchimp.我已将Google reCAPTCHA添加到表单中并进行数据回调以启用提交按钮,因为它最初被禁用.这在昨晚的所有浏览器中运行良好,并且成功进行了测试并在其上签了字.然后回家了.我今天早上到了,发现订阅按钮不会启用/ data-callback不起作用?奇怪..

打回来

<div class="g-recaptcha" data-callback="recaptcha_callback" data-sitekey="xxxxx"></div>  
Run Code Online (Sandbox Code Playgroud)

表格底部的输入按钮

<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button" disabled>
Run Code Online (Sandbox Code Playgroud)

脚本

<script src='https://www.google.com/recaptcha/api.js'></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>    
<script type="text/javascript">
    $(document).ready(function() {
      function recaptcha_callback(){
        alert("callback working");
        $('.button').prop("disabled", false);
      }
    )};
</script>
Run Code Online (Sandbox Code Playgroud)

javascript jquery callback recaptcha

19
推荐指数
1
解决办法
3万
查看次数

如何自我记录模板库类调用的回调函数?

我有一个函数User::func()(回调),它将由模板类(Library<T>)调用.

在开发的第一次迭代中,每个人都知道func()只为这个目的服务.
几个月后,大多数成员忘记了什么func().
经过一些重构后,func()有时会被一些程序员删除.

起初,我认为这根本不是问题.
但是,在我多次重新遇到这种模式之后,我想我需要一些反制措施.

如何优雅地记录它?(可爱&&简洁&&没有额外的CPU成本)

这是一个简化的代码: -
(现实世界的问题是散布10个以上的库文件和20多个用户文件以及40多个函数.)

Library.h

template<class T> class Library{
    public: T* node=nullptr;
    public: void utility(){
        node->func();  //#1
    }
};
Run Code Online (Sandbox Code Playgroud)

User.h

class User{
    public: void func(){/** some code*/} //#1
    //... a lot of other functions  ...
    // some of them are also callback of other libraries
};
Run Code Online (Sandbox Code Playgroud)

main.cpp中

int main(){
    Library<User> li; .... ;  li.utility();
}
Run Code Online (Sandbox Code Playgroud)

我糟糕的解决方案

1.评论/文件

作为第一个解决方法,我倾向于添加这样的评论: -

class …
Run Code Online (Sandbox Code Playgroud)

c++ maintainability templates readability callback

19
推荐指数
1
解决办法
698
查看次数

从C++调用Python函数

我试图从C++实现调用Python函数.我认为它可以通过函数指针实现,但似乎不可能.我一直boost.python用来完成这个.

假设在Python中定义了一个函数:

def callback(arg1, arg2):
    #do something
    return something
Run Code Online (Sandbox Code Playgroud)

现在我需要将此函数传递给C++,以便可以从那里调用它.如何在C++端编写代码boost.python来实现这一目的?

c++ python callback boost-python

18
推荐指数
1
解决办法
1万
查看次数

跳过回调函数中的参数

我正在使用的回调函数具有以下签名(来自http://api.jquery.com/load/):

complete(responseText, textStatus, XMLHttpRequest)
Run Code Online (Sandbox Code Playgroud)

现在,我只需要第三个参数.在Lua中有一个约定,其中使用下划线从函数中跳过不需要的返回值(跳过因为_实际上将保存该值):

var1, _, _, var4 = func()
Run Code Online (Sandbox Code Playgroud)

所以我想用JavaScript做类似的事情并设置我的函数签名:

function (_, _, XMLHttpRequest)
Run Code Online (Sandbox Code Playgroud)

这种方法有什么问题吗,也许有更好/更清洁的方法?

javascript callback

18
推荐指数
2
解决办法
6958
查看次数

绑定到weak_ptr

有没有办法将std :: bind绑定到std :: weak_ptr?我想存储一个"弱函数"回调,当被调用者被销毁时,它会自动"断开连接".

我知道如何使用shared_ptr创建一个std :: function:

std::function<void()> MyClass::GetCallback()
{
    return std::function<void()>(std::bind(&MyClass::CallbackFunc, shared_from_this()));
}
Run Code Online (Sandbox Code Playgroud)

但是返回的std :: function使我的对象永远保持活着.所以我想将它绑定到weak_ptr:

std::function<void()> MyClass::GetCallback()
{
    std::weak_ptr<MyClass> thisWeakPtr(shared_from_this());
    return std::function<void()>(std::bind(&MyClass::CallbackFunc, thisWeakPtr));
}
Run Code Online (Sandbox Code Playgroud)

但那不编译.(std :: bind将不接受weak_ptr!)有没有办法绑定到weak_ptr?

我已经找到了关于这个的讨论(见下文),但似乎没有标准的实现.存储"弱功能"的最佳解决方案是什么,特别是如果Boost不可用?


讨论/研究(所有这些都使用Boost并且没有标准化):

c++ bind callback weak-ptr std-function

18
推荐指数
2
解决办法
8553
查看次数