从Ember 1.0- pre2转换为最新版本(43354a98)和新路由器时遇到问题,即 -
如果我有一个路由只加载一堆记录的名称和ID,并尝试将每个记录链接到另一个应该显示完整模型的路径,当我到达新路径时,新模型永远不会被加载,名称和ID是唯一可用的属性.
示例代码:
App.Router.map(function() {
this.route("index");
this.resource("birds");
this.resource("bird", {
path: "/birds/:bird_id"
});
});
App.BirdsController = Ember.ArrayController.extend({
birds: [
{
name: "Pigeon",
id: "b.15"
}, {
name: "Chicken",
id: "b.133"
}, {
name: "Turkey",
id: "b.126"
}, {
name: "Ostrich",
id: "b.4"
}, {
name: "Barn Owl",
id: "b.47"
}
]
});
App.BirdRoute = Ember.Route.extend({
model: function(params) {
return App.Bird.find(params.bird_id);
}
});
{{#each bird in birds}}
<li>{{#linkTo "bird" bird}}{{bird.name}}{{/linkTo}}</li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
其中App.Bird.find()运行一些XHR来从一组远程API(不使用ember-data)构建Ember.Object.仅为此示例将鸟类列表硬编码到控制器中,以简化问题; 在我的实际应用程序中,该列表来自远程API.
我看到的行为是,如果你开始/鸟类并点击其中一个链接,路由器将转换为'bird',你到达/#/birds/b.5,但App.Bird.find()是从来没有打电话,我在页面上的唯一数据是"name"和"id".但是,如果您重新加载页面,它会调用App.Bird.find()并正确构建并显示模型.
有没有办法从URL中的ID强制反序列化,或者只是将ID传递给linkTo而不是它将假定完成的对象?我有一个类似的实现与旧路由器正常工作.
有没有办法将SSL选项传递到"rails服务器"(在Rails 3.0.0上),使用自定义Rack配置或类似的东西?我正在尝试做两件事:
在2.3.8上,我们有一个分叉的脚本/服务器,可以在第二个端口上启动一个特殊的WEBrick,并带有所有适当的SSL选项.当然,当我尝试升级到Rails 3时会爆炸,所以我试图弄清楚如何解决这个问题,理想情况下这样做不需要任何东西.
在我们的分叉脚本/服务器中,我们设置了如下选项:
:SSLEnable => true,
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
:SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open(current_dir + "/config/certs/server.key").read),
:SSLCertificate => OpenSSL::X509::Certificate.new(File.open(current_dir + "/config/certs/server.crt").read),
:SSLCertName => [ [ "CN", WEBrick::Utils::getservername ] ]
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在新框架中这样做.
谢谢你的帮助!
在路由器API的v1中,您可以设置此标志:
App.Router = Ember.Router.extend({
enableLogging: true
});
Run Code Online (Sandbox Code Playgroud)
并且路由器会将状态更改记录到console.log,这有助于调试.这似乎不再起作用了 - 有谁知道这个标志是否有新的等价物?