我正在看Ember.js,并一直在阅读文档,试图了解如何使用它.我得到它(相当不错),除了一件事.根据我在MVC模式中的思考方式,Model是应用程序中数据的存储库.我可以看到它对Ember.js中的客户端数据有何用处.我没有得到的是如何将数据绑定回服务器,以便在客户端数据发生变化时,更改将在服务器中更新.反之亦然.我一直在我的Web应用程序中执行此操作,使Ajax/JSON调用来回到服务器,我只是没有得到如何使用Ember.js.
有没有人在RequireJS和Ember.js上取得多大成功?看到Ember喜欢将其结构分配给一个全局对象,我发现它可以与Requirejs真正对接.像LAB.js这样的东西会更适合Ember吗?
什么是"正确的方式"(或者至少是选项,如果没有单一的"Ember方式"这样做)导航侧边栏?我应该以某种方式查看ContainerViews,还是应该使用新的插座功能并将导航粘贴到我的应用程序视图中?
另外,根据URL(我正在使用路由)在li上设置.active类的"正确方法"是什么?对此有什么帮助吗?
我StreamWriter在windows-8中创建对象时遇到了麻烦,通常我只是创建一个实例,只是将一个字符串作为参数传递,但是在Windows 8中我得到一个错误,表明它应该接收一个Stream,但我注意到了Stream是一个抽象类,有谁知道编写一个xml文件的代码怎么样?BTW我正在使用.xml因为我想保存序列化对象,或者有人知道如何将序列化对象保存到文件中Windows 8?
有任何想法吗?
目前正在使用Windows 8 Consumer Preview
码:
StreamWriter sw = new StreamWriter("person.xml");
错误:
The best overloaded method match for 'System.IO.StreamWriter.StreamWriter(System.IO.Stream)' has some invalid arguments
如何在我当前的控制器中获取以前的路由器.
App.MyController = Em.ObjectController.extend({
next:function() { // This is my action helper in HBS
this.transitionTo('nextPage');
},
back:function() { // This is my action helper in HBS
// Here I need to dynamically identify my previous route.
// How can I get my previous route.
}
});
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有一个包含一些设置信息的面板.点击按钮即可打开/关闭此面板,但我也希望能够通过敲击esc键盘来关闭它.
我的View代码如下所示:
Social.MainPanelView = Ember.View.extend({
elementId: 'panel-account-settings',
classNames: ['panel', 'closed'],
keypress: function(e){
console.log(e);
console.log('keypress');
},
close: function(){
this.$().prepareTransition().addClass("closed");
}
});
Run Code Online (Sandbox Code Playgroud)
我也尝试过keyup和keydown,但没有任何反应.我怀疑这是因为这不是一个"输入"类型的视图,而只是一个标准视图.那么如何从关键事件触发View上的方法呢?
我应该澄清,这不属于这一特定要素的路线.我正在打开独立面板,如本视频中所示:
http://screencast.com/t/tDlyMud7Yb7e
更新1
这是我创建的一个快速小提琴,用于说明我遇到的问题.我可以很容易地触发click事件,但我正在寻找一个页面范围的keyup事件,它将检测被按下的esc键并触发特定View上的方法:
我很困惑如何使用新的路由器方法连接插座.
index.html的:
...
<script type="text/x-handlebars" data-template-name="application">
<h4>The application handelbar</h4>
{{! outlet 1}}
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<h4>The index handelbar</h4>
{{! outlet 2 and 3}}
{{outlet nav}}
{{outlet main}}
</script>
<script type="text/x-handlebars" data-template-name="main">
<h4>The main handelbar</h4>
</script>
<script type="text/x-handlebars" data-template-name="nav">
<h4>The nav handelbar</h4>
</script>
...
Run Code Online (Sandbox Code Playgroud)
app.js:
...
App.Router.map(function(match) {
this.resource("index", { path: "/" });
this.route("test");
});
App.IndexController = Ember.Controller.extend({
});
App.IndexView = Ember.View.extend({
templateName: 'index'
});
...
Run Code Online (Sandbox Code Playgroud)
此代码呈现outlet-1.
问题:
谢谢
你
我有一个嵌套的路由层次结构,我需要我的应用程序来跟踪用户模型选择.我正在尝试使用主应用程序模板,并将每个路径渲染到该模板上的单个插座中.当我遍历从父级到子级的路由层次结构时,这是有效的.
但是,一旦单击浏览器后退按钮以返回路径层次结构,父路由renderTemplate挂钩就不会触发.这导致儿童从插座上脱钩而没有任何东西再次进入插座.
这是一个例子:
App = Ember.Application.create({});
App.Router.map(function(){
this.resource("animals", function(){
this.resource("pets", function(){
this.route('new')
})
})
});
App.PetsView = Ember.View.extend({
templateName : 'wild/pets'
});
App.AnimalsRoute = Ember.Route.extend({
renderTemplate: function() {
this.render({
into: "application",
outlet : "A"
})
}});
App.PetsRoute = Ember.Route.extend({
renderTemplate: function() {
this.render({
into: "application",
outlet : "A"
})}});
App.PetsNewRoute = Ember.Route.extend({
renderTemplate: function() {
this.render({
into: "application",
outlet : "A"
})}});
Run Code Online (Sandbox Code Playgroud)
使用模板:
<script type="text/x-handlebars" data-template-name="application">
<h1>{{#linkTo "animals"}}Hello from Ember.js</h1>{{/linkTo}}
{{outlet A}}
</script>
<script type="text/x-handlebars" data-template-name="animals">
{{#linkTo "pets"}}This is animals …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些东西与ember + emberdata + router + asp.net web api放在一起.大多数它似乎工作,但我陷入了一个错误消息,当ember-data尝试findAll通过适配器为我的模型时我得到.
在我的后端,我有一个这样的模型(C#):
public class Genre {
[Key]
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength=3)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我使用ember-data代表它:
App.Genre = DS.Model.extend({
id: DS.attr("number"),
name: DS.attr("string")
}).reopenClass({
url: 'api/genre'
});
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序中使用RESTAdapter定义了一个Store,如下所示:
App.store = DS.Store.create({
revision: 4,
adapter: DS.RESTAdapter.create({
bulkCommit: false
})
});
Run Code Online (Sandbox Code Playgroud)
商店在我的控制器中使用如下:
App.GenreController = Ember.ArrayController.extend({
content: App.store.findAll(App.Genre),
selectedGenre: null
});
Run Code Online (Sandbox Code Playgroud)
路由器定义为
App.router = Em.Router.create({
enableLogging: true,
location: 'hash',
root: Ember.Route.extend({
//...
genre: …Run Code Online (Sandbox Code Playgroud) javascript ember.js asp.net-web-api ember-data ember-old-router
我正在体验Ember.js,并设置了一个小应用程序,用户可以登录和注销.当用户注销时,我想清除数据存储中的所有当前缓存的记录.有没有办法做到这一点,还是我必须强制浏览器重新加载页面?
ember.js ×9
ember-router ×4
javascript ×3
ember-data ×2
ajax ×1
c# ×1
jquery ×1
requirejs ×1
windows-8 ×1