使用final-form,我有第三方输入组件.我为它写了一个适配器.它也有验证器,但meta.touched总是错误的.我已经尝试将onFocus事件传播到输入,但没有运气.我究竟做错了什么?
const requiredValidator = value => (value ? undefined : 'is required');
const FloatingLabelInputAdapter = ({ input, meta, ...rest }) => (
<FloatingLabelInput
{...rest}
onChange={(event) => input.onChange(event)}
onFocus={(event) => input.onFocus(event)}
errorText={meta.touched ? meta.error : ''}
/>
)
// used like this:
<Field
component={FloatingLabelInputAdapter}
label="Email"
name="email"
type="text"
validate={requiredValidator}
/>
// and here's the render() of the component
render() {
const { children, label } = this.props;
const { focussing, used } = this.state;
console.log('FloatingLabelInput.props', this.props);
return (
<Group {...this.props} …Run Code Online (Sandbox Code Playgroud) 我正在尝试在模板中添加视图.此模板定义了一个名为NewAssetLinkView的视图.在里面我正在添加TracksView.ember给出了例外:
未捕获错误:断言失败:Ember.CollectionView的内容必须实现Ember.Array.您传递了AssetLinksApp.NewAssetLinkController:ember538
似乎路由器正在尝试自动创建NewAssetLinksController并将其应用于TracksView,这是错误的.也许这样做是因为TracksView在NewAssetLinkView中声明了?(顺便说一下,NewAssetLinkController扩展了ObjectController)
我有一个TracksView应该使用的TracksController - 我如何让路由器不尝试自动创建并将错误的控制器与TracksView关联?
<script type="text/x-handlebars" data-template-name="new_asset_link_view">
.....
{{view AssetLinksApp.TracksView}}
</script>
Run Code Online (Sandbox Code Playgroud) 我以前没有用JS编写单元测试,我一般都在学习ember和javascript,所以请原谅它的简单性问题.
Ember应用程序的结构是首先为应用程序创建一个名称空间,如下所示:
MyApp = Ember.Application.create({...})
Run Code Online (Sandbox Code Playgroud)
然后你定义一个这样的模型:
MyApp.SomeModel = DS.Model.extend({...})
Run Code Online (Sandbox Code Playgroud)
但是当我正在编写单元测试时SomeModel,Ember.Application当你只是对模型进行单元测试时,实例化一个实例似乎是不对的,特别是对于所有的Router注入以及这种情况在幕后进行.
但是,要定义模型,您需要app namespace,MyApp.SomeModel..并且在Application实例化时创建应用程序名称空间(如果遵循Ember命名空间约定).
那么如何在不实例化应用程序的情况下对模型进行单元测试呢?你是否为app命名空间创建了一个模拟器?
我正在使用茉莉花顺便说一下.
这是小提琴.
http://jsfiddle.net/inconduit/hf7XM/10/
重现问题的步骤:
似乎返回的控制器引用controllerFor()实际上并不是PostsIndexController?这是为什么?
我在路径的setupController()钩子中攻击它以在App上设置对该控制器的全局引用,当我将该引用的内容设置为新数组时emptyList2(),列表在模板中正确清除.
我用controllerFor()错了吗?还是误解了它的回归?这是一个范围问题吗?请帮帮我.
App.PostsIndexRoute = Ember.Route.extend({
setupController : function(controller,model) {
controller.set('content',['one','two','three']);
App.postsIndexController = controller;
}
});
// receives the {{action}} from the template
App.PostsController = Ember.Controller.extend({
emptyList : function() {
this.controllerFor('postsIndex').set('content',Ember.A());
},
emptyList2 : function() {
App.postsIndexController.set('content',Ember.A());
}
});
Run Code Online (Sandbox Code Playgroud) ember rc1,ember-data rev 12.所有其他路由正确加载,不确定为什么我看到这个错误.当我尝试访问show route即/ files/groups/5时会发生这种情况.索引路线呈现良好.
我已经粘贴了下面的堆栈跟踪,但它的信息量不大.我在这里做什么基本上是错的?
我的路线/控制器设置如下:
this.resource('files', { path : '/files' }, function() {
this.resource('groups', { path : '/groups' }, function() {
this.route('show', { path : '/:asset_link_group_id' });
});
});
AssetLinksApp.GroupsShowController = Ember.ArrayController.extend({
content : Ember.A(),
assetLinkGroup : null
});
AssetLinksApp.GroupsShowRoute = AssetLinksApp.AuthRequiredRoute.extend({
setupController : function(controller,model) {
controller.set('content',model.get('asset_links'));
controller.set('assetLinkGroup',model);
},
model : function(params) {
return AssetLinksApp.AssetLinkGroup.find(params.asset_link_group_id);
}
});
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
加载路由时出错:TypeError {} exchange_vendor.js:12078
(匿名函数)exchange_vendor.js:12078 Ember.Router.reopenClass.defaultFailureHandler.setup exchange_vendor.js:35011 failure exchange_vendor.js:34448 objects.concat.context exchange_vendor.js:34497 invokeCallback exchange_vendor.js:17846 Promise.then exchange_vendor. js:17893 EventTarget.trigger exchange_vendor.js:17822 results exchange_vendor.js:17924 …