我正在寻找的最简单的例子是:
var messageLoader = $.post("api/user/messages", {api:data})
messageLoader.done(function(data){
//do something
});
这非常有效,但只有一次。如果我想更新数据,我必须重新定义所有内容。
我似乎找不到任何让我重新启动它的延迟对象调用。即 messageLoader.redo(),理想情况下会重新执行 POST 请求,然后调用相同的“完成”处理程序,而无需我重新定义它。
我可以把它全部放在一个函数中,然后简单地再次调用该函数,但这不是我想要的,因为我还想这样做:
var messageLoader = $.post("api/user/messages", {api:data})
var friendRequestLoader = $.post("api/user/friendrequests", {api:data})
$.when(messagesLoader, friendRequestLoader)
.done(function (messages, friendRequests) {
// update display of messages and friend requests
// attach Handlers
});
$("#updateMessages").click(function(){
messageLoader.redo() // This doesn't exist
})
想法是点击 $("#updateMessages") 会重新执行那个请求,然后 $.when() 处理程序会使用新的 messageLoader 数据,以及原始的 friendRequestLoader 数据。
我在文档中查找过类似的内容,但没有找到任何内容。也许这里有人知道它是否存在,或者有办法完成同样的事情。
最佳答案
我很确定 Deferred 类并没有按照您想要的方式设计,因为它们旨在成为一次性使用的对象。我什至参加了 jQueryConf 上关于 Deferreds 的整个 session ,甚至没有提到重用它们。
此外,从 Deferred API 页面可以看出:
http://api.jquery.com/category/deferred-object/
没有重启方法。您可能能够手动更改 Deferred 的属性以模拟“重新启动”它,但实际上我认为此时您应该创建自己的类,因为您确实在寻找 Deferred 没有的东西'报价。
你必须记住,Deferred 的设计让你可以说“嘿 Deferred,去做点什么”(new Deferred().when(something)),然后你可以说“嘿 Deferred,完成后做 X”(deferred.then(x))。现在,当你说“完成时”,即。当您进行 .then 调用时,Deferred 可以处于两种状态:完成或未完成,但调用在任何一种情况下都有效(如果完成则立即解析,否则等待触发) .
现在,如果 Deferred 可以有第三种状态(“完成但重新启动”),.then 调用将不知道该做什么:“完成但重新启动”意味着它应该是不是就开火?答案取决于您是在调用 restart 之前还是之后调用 .then ,并且您希望看到所有这些都有可能变得相当复杂(特别是如果您允许多次重启) .
jQuery 人员没有处理所有这些($.ajax 不需要这些),而是选择了(相对简单的)当前 Deferred 实现,我认为这是正确的调用他们的部分。
关于javascript - 重用 jQuery.post()/jQuery.Deferred() 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13732713/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法