我有许多 jQuery 插件,我想在 TypeScript 中使用 AMD 模式加载它们。例如,我可能有这样的结构:
/lib/jquery.myplugin.js
/app.ts
该插件只是扩展了 jQuery。它不提供新的顶级函数或变量。一个例子可能是:
// jquery.myplugin.js
jQuery.fn.myExample = function() { ... }
相应的 jquery.myplugin.d.ts 文件如下所示:
interface JQuery {
myExample();
}
所以现在在 app.ts 中我可以调用类似 $('#my-element').myExample() 的东西.请注意,这假设我已经加载了 Microsoft 的 jquery.d.ts 声明。
我的问题是如何异步加载这个库并利用 TypeScripts 静态类型?我可以这样使用它:
/// <reference path="lib/jquery.myplugin.d.ts"/>
但这需要我添加 <script>标记到我的 HTML,并且库不是异步加载的。我希望 TypeScript 生成这段代码:
define(["require", "exports", "lib/jquery.myplugin"], function (require, exports, __jquery.myplugin__) {
...
// Use my plugin
$('#my-element').myExample();
}
但是,由于 .d.ts 文件中没有导出,所以我不能写 import myplugin = module('lib/jquery.myplugin') .
我得到的最接近的是制作一个 jquery.myplugin.d.ts引用另一个带有接口(interface)声明的 ts 文件并至少包含一个导出。但是,此库中没有可导出的内容,为了获得所需的输出,我不仅必须添加导出,而且还必须调用它。
更新:我开了一个work item为此 typescript.codeplex.com
最佳答案
有点 hack,但这是我目前知道的唯一方法。
myplugin.d.ts:扩展 JQueryStatic 接口(interface)以包含 myplugin 功能的智能感知
/// <reference path="../dep/jquery/jquery.d.ts" />
interface JQueryStatic {
myFunc(): string;
}
myplugin.ts:一个虚拟文件,其唯一目的是让 typescript 生成 amd 模块定义。
var test: number = 1;
consumer.ts:
/// <reference path="myplugin.d.ts" />
import myplugin = module('myplugin');
// without this typescript knows you aren't actually using the module
// and won't create the define block including your plugin
var workaround = myplugin.test;
$.myFunc();
consumer.js:使用 tsc -c --module amd consumer.ts
define(["require", "exports", 'myplugin'], function(require, exports, __myplugin__) {
/// <reference path="myplugin.d.ts" />
var myplugin = __myplugin__;
// without this typescript knows you aren't actually using the module
// and won't create the define block including your plugin
var workaround = myplugin.test;
$.myFunc();
})
请注意,myplugin.d.ts 将为 jQuery 和您的插件定义引入智能感知。有必要同时创建 myplugin.d.ts 和 myplugin.ts,因为我不知道如何(如果可能的话)导出某些内容,同时在同一文件中无错误地扩展现有接口(interface)。
关于javascript - 不带导出的 TypeScript 声明的异步加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13015898/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail
我有一个ruby程序,我想接受用户创建的方法,并使用该名称创建一个新方法。我试过这个:defmethod_missing(meth,*args,&block)name=meth.to_sclass我收到以下错误:`define_method':interningemptystring(ArgumentError)in'method_missing'有什么想法吗?谢谢。编辑:我以不同的方式让它工作,但我仍然很好奇如何以这种方式做到这一点。这是我的代码:defmethod_missing(meth,*args,&block)Adder.class_evaldodefine_method