2012-02-14 52 views
1

所以我创建以后可以轻松实例化,例如可重复使用的UI组件:在Backbone.js中构建UI工具包时,应该使用视图来创建模型?

this.emailInput = new TextInput() { 
    label : 'Email Address', 
    validators : [validatorFunc, secondValidatorFunc], 
    placeholder : '[email protected]' 
}); 

这将是有意义的这个视图中创建自己的模型,将存储在一个的keydown和value办理验证?如果没有验证,它仍然有意义吗?

然后比较复杂,与自动完成:

this.countryInput = new AutocompleteInput() { 
    label : 'Country', 
    placeholder : 'eg. United States', 
    suggestions [ 
     { id : '1', value : 'USA', text : 'United States' }, 
     { id : 2, value : 'DE', text : 'Germany' }, 
     ... 
    ] 
}); 

难道是有意义的这些建议将被存储在由创建视图,以及他们自己的模型?我是否也应该在该模型中存储selected建议?

看起来好像没有使用模型我一直在复制很多模型自动给你的逻辑。

我也一直在想每个suggestion是它自己的视图创建自己的模型,并有suggestionListView知道收集。那是Collection/ListViews的工作方式吗? ListView知道Collection并且ItemView知道Model?

回答

1

您的TextInput视图的validators部分绝对更适合模型。骨干中的模型可以自我验证,因此可以为您提供很多支持。在您的​​方案中,该模型将具有一个永久性value字段,该字段存储input的当前值。你不必明确地验证对任何新值上​​,你可以直接尝试set模型:

如果模型拥有validate方法,所设置的 属性之前将被验证,如果验证失败,则不会发生更改,并且 集将返回false。 - Backbone docs

所以只要确保适当地定义你的validate方法。

如果没有验证,它仍然有意义吗?

这是一个有趣的问题,因为您的模型/视图情况并不是很典型。我的意思是,它看起来像创建表单域来创建表单域。 如果这些字段与应用程序中的实际模型(即,存储在持久层中的东西)绑定,那么这些模型应该是您的骨干模型。否则我假设你实际上想要这个模型意味着“这是一个输入字段”。但是我会拒绝,如果你不关心验证,可能没什么意义 - 因为在那种情况下,你只是对用户事件做出响应,并做出你想要的任何渲染,不关心实际数据是什么。

对于你的第二个问题:我不认为它会让你付出很多努力将这些建议融入他们自己的模型中。你不会单独设置它们,而只是基于另一个模型的值来检索它们。

至于你的最后一点:这当然是如何收藏的工作,但我不认为它会买你很多。但是,只是为了说明这一点,它看起来像这样:suggestions将是Suggestion模型的集合; collectionView将显示modelssuggestions,这将是每个suggestionView呈现一个单一的建议。再次,在这种情况下,这完全是矫枉过正国际海事组织。这样做的唯一理由是,如果你真的关心每个单独的建议,即如果你想响应它的事件,或者由于某种原因保存它的数据。不过,我认为你不这样做。

相关问题