我没有找到这样的多图构造...当我想要这样做时,我遍历地图,并填充多图.还有其他方法吗?
final Map<String, Collection<String>> map = ImmutableMap.<String, Collection<String>>of(
"1", Arrays.asList("a", "b", "c", "c"));
System.out.println(Multimaps.forMap(map));
final Multimap<String, String> expected = ArrayListMultimap.create();
for (Map.Entry<String, Collection<String>> entry : map.entrySet()) {
expected.putAll(entry.getKey(), entry.getValue());
}
System.out.println(expected);
Run Code Online (Sandbox Code Playgroud)
第一个结果是,{1=[[a, b, c, c]]}但我期待{1=[a, b, c, c]}
我有一个动作:
{{action create target="controller"}}
Run Code Online (Sandbox Code Playgroud)
我已将其定位到绑定控制器(而不是路由器),如下所示:
App.AddBoardController = Ember.Controller.extend
create: ->
App.store.createRecord App.Board, {title: @get "boardName"}
App.store.commit()
//TODO: Redirect to route
Run Code Online (Sandbox Code Playgroud)
如何从控制器操作重定向回路由?
让我们说
Post = DS.Model.extend({
comments: DS.hasMany({async: true})
})
Comment = DS.Model.extend({
post: DS.belongsTo()
})
Run Code Online (Sandbox Code Playgroud)
并且我必须使用该links功能,否则由于对帖子的评论过多而导致414错误.
自此提交https://github.com/emberjs/data/commit/4d717bff53f8c93bedbe74e7965a4f439882e259
似乎不可能触发post.get('comments')的重新加载,即发送GET请求,例如post/42/comments.
那有什么解决方案吗?
我正在尝试将一些东西与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
似乎较旧的路由使用StateManager示例和较新的示例使用的概念Router.有什么区别以及为什么要使用其中一个?
在我的项目中,我正在使用glassfish-embedded 3.1.1和番石榴lib ...问题是glassfish附带了番石榴的旧实现(即google-collections)......
这会在运行时导致NoSuchMethodError,例如在使用稍后在guava中引入的Lists.reverse()或Sets.newIdentityHashSet()时.
我找不到任何解决方案来解决这个问题...(唯一一个是手动删除glassfish jar中的com/google类目录...)
我很想知道关于新的ember路由和控制器的哪一层逻辑是什么:
如果我们以下面的路线为例:
step1: Ember.Route.extend
route: '/step1'
connectOutlets: (router, event) ->
exercise = WZ.Exercise.createRecord()
router.get('exercisesNewStep1Controller').set 'groups', WZ.store.find(WZ.Group)
router.get('exercisesNewController').connectOutlet 'step', 'exercisesNewStep1', exercise
Run Code Online (Sandbox Code Playgroud)
我的ExercisesNewStep1Controller目前是无逻辑的:
WZ.ExercisesNewStep1Controller = Em.Controller.extend()
Run Code Online (Sandbox Code Playgroud)
建议的建议似乎是让路径只需要使用控制器中的任何其他逻辑将正确的插座分配给正确的控制器.
我应该重构我的控制器:
WZ.ExercisesNewStep1Controller = Em.Controller.extend
createGroup: ->
@set 'groups', WZ.store.find(WZ.Group)
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的例子,但我认为逻辑成立.
我对所有图层的位置感到困惑.我认为必须创建所有这些xxxController,xxxView文件以及它们之间的耦合,这会产生少量开销.
我喜欢灰烬,但我只是想提出这一点.
是否存在关于接口状态(与持久模型状态相对)应该存在于Ember.js应用程序中的官方故事?
在路由器文档的"响应用户启动的事件"部分中,有一个将点击事件委托给照片的"showPhoto"方法的示例,但是模型"显示"本身似乎是一种不合需要的混合关注点.
我知道在许多情况下,状态应该存储在路由器中,以便接口状态在URL中表示,并在刷新页面或将URL发送给某人时恢复.但是非分层状态呢,例如页面上选择的项目列表呢?
理想情况下,该类型的状态将被序列化为查询/哈希参数(例如:http://www.hipmunk.com/flights/QSF-to-NYC#!dates=Sep15,Sep16p1;kind=flight&locations=QSF,YYZ&dates=Sep15 ,Sep23~tab = 1)但据我所知,路由器不提供该功能,是吗?
在BackboneConf,Jeremy Ashkenas说在Backbone中做到这一点的正确方法是将状态存储在模型上(他有一个带有"选定"字段的模型的例子).但是我相信汤姆戴尔说他认为这不是一个好主意,而不是在Ember应该怎么做.不幸的是,我不记得他提到应该怎么做.
我无法弄清楚使用新的Ember路由器处理模态状态/视图的正确方法.更一般地说,如何处理可以进入和退出而不影响"主"状态(URL)的状态?
例如,无论当前叶状态如何,始终可用的"新消息"按钮.单击"新消息"应在当前视图上打开新消息模式,而不会影响URL.
目前,我正在使用这样的方法:
路线:
App.Router.map(function() {
this.route('inbox');
this.route('archive');
});
App.IndexRoute = Em.Route.extend({
...
events: {
newMessage: function() {
this.render('new_message', { into: 'application', outlet: 'modalView' });
},
// Clicking 'Save' or 'Cancel' in the new message modal triggers this event to remove the view:
hideModal: function() {
// BAD - using private API
this.router._lookupActiveView('application').disconnectOutlet('modalView');
}
}
});
App.InboxRoute = Em.Route.extend({
...
renderTemplate: function(controller, model) {
// BAD - need to specify the application template, instead of using default implementation …Run Code Online (Sandbox Code Playgroud) 我有一个余烬应用程序和插座的概念和连接插座很好,我明白了.我不明白的是如何在没有疯狂嵌套的情况下在另一个视图/控制器视图中有多个视图/控制器视图
假设我正在设计icloud clone,我有电子邮件功能和照片库功能.现在,如果我想完成类似的事情
***********************************************************
* INBOX LIST ** COMPOSE OR VIEW MESSAGE *
* ** *
* ** *
* ** *
* ** *
* CONTACTS LIST ** *
* ** *
* ** *
* ** *
* ** *
***********************************************************
Run Code Online (Sandbox Code Playgroud)
我想要设计的方式就像是
EmailController/View
|-- SplitViewController/View
|-- InboxListController/View
|-- ContactsListController/View
|-- ComposeMessageController/View
|-- ReadMessageController/View
Run Code Online (Sandbox Code Playgroud)
我可以将这些热交换到SplitView的级别或将它们全部删除,但我没有看到一个很好的方法,只outlet允许一个这样做.它会迫使我接下来不应该嵌套的东西.使用单一插座方法,我的结构看起来更像
EmailController/View
|-- SplitViewController/View
|-- InboxListController/View
|-- ContactsListController/View
|-- ComposeMessageController/View
|-- ReadMessageController/View
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到适合Ember.js/Router的架构风格,它仍然允许更复杂的嵌套?
ember.js ×8
javascript ×5
ember-data ×2
guava ×2
java ×2
architecture ×1
ember-router ×1
glassfish ×1
multimap ×1
routes ×1