给定一个模型
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
什么是最简单,最强大的方法?
我有用于存储回调函数的结构,如下所示:
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函数想要返回一个值..
这个问题的最佳解决方案是什么?
谢谢!
我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而不必求助于使用全局变量?
在我的应用程序中,我有一个自定义的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单元格一个块来执行选择,因为我知道可以使用特定参数定义块.此外,不需要传递"目标"对象.
那我该怎么做呢?
谢谢!
我有一个网页,我在其中放置了一个类似于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
我已经建立了一个电子邮件简报注册表格,从我的网站发布到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) 我有一个函数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)
作为第一个解决方法,我倾向于添加这样的评论: -
class …Run Code Online (Sandbox Code Playgroud) 我试图从C++实现调用Python函数.我认为它可以通过函数指针实现,但似乎不可能.我一直boost.python用来完成这个.
假设在Python中定义了一个函数:
def callback(arg1, arg2):
#do something
return something
Run Code Online (Sandbox Code Playgroud)
现在我需要将此函数传递给C++,以便可以从那里调用它.如何在C++端编写代码boost.python来实现这一目的?
我正在使用的回调函数具有以下签名(来自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)
这种方法有什么问题吗,也许有更好/更清洁的方法?
有没有办法将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并且没有标准化):
callback ×10
c++ ×4
javascript ×4
templates ×2
bind ×1
boost-python ×1
facebook ×1
ios ×1
jquery ×1
objective-c ×1
oop ×1
python ×1
readability ×1
recaptcha ×1
std-function ×1
validation ×1
weak-ptr ×1