Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Emberjs,数据源,推特引导类型_Javascript_Ember.js - Fatal编程技术网

Javascript Emberjs,数据源,推特引导类型

Javascript Emberjs,数据源,推特引导类型,javascript,ember.js,Javascript,Ember.js,虽然这可能特定于“typeahead”情况,并且我的示例具有静态内容,但实际上这将适用于“数据源”的任何引导使用。我希望有一天我长大后能在typeahead实现中使用动态内容,所以现在我正在尝试绑定方式: Ember.TextField.reopen({ //add some bootstrap specific stuff attributeBindings: ['data-provide', 'data-items', 'dataSourceBinding:data-sour

虽然这可能特定于“typeahead”情况,并且我的示例具有静态内容,但实际上这将适用于“数据源”的任何引导使用。我希望有一天我长大后能在typeahead实现中使用动态内容,所以现在我正在尝试绑定方式:

Ember.TextField.reopen({
    //add some bootstrap specific stuff
    attributeBindings: ['data-provide', 'data-items', 'dataSourceBinding:data-source'],
    'dataSourceBinding': Ember.Binding.oneWay('App.AddStoreTemplateController.statesArray')
});
我有一个带有ConnectOutlet的路由器,它连接了我的模板:

{{view Ember.TextField elementId="state" placeholder="NY/New York" valueBinding="state" data-provide="typeahead" data-items="4" data-source="App.router.addStoreTemplateController.statesArray"}}
{{view Ember.TextFieldTypeahead elementId="state" placeholder="NY/New York" valueBinding="state" data-provide="typeahead" data-items="4" data-source=on}}
我的控制器:

    AddStoreTemplateController: Ember.ArrayController.extend({
            statesArray: ['Alabama', 'Washington']
    }),
formattedDataSource: function(){
  .. format your states array as a string or dump to json...
}.property()
我希望看到以HTML呈现的内容:

<input id="state" class="ember-view ember-text-field" placeholder="NY/New York" type="text" data-provide="typeahead" data-items="4" data-source="['Alabama', 'Washington']">

它在HTML中实际呈现的内容:

<input id="state" class="ember-view ember-text-field" placeholder="NY/New York" type="text" data-provide="typeahead" data-items="4" data-source="App.router.addStoreTemplateController.statesArray">

提前打印文档


非常感谢。我真的很喜欢EmberJS

为此,我不会使用
Ember.TextField
。你可以这样做:

<input ... data-items="4" {{bindAttr data-source="formattedDataSource"}}/>

您也可以这样做(当您希望在从服务器键入时动态加载数据时):

车把的外观如下:

{{view EEPD.EbedMedicationArticleTypeAhead
      label="Medicament:"
      name="articleNumber"}}
结果:


在对这一点做了更多的修改之后,我找到了一个简单的方法来实现这一点。它不需要第三方库,您可以使用Ember.TextField保持输入的美观:

我创建了一个新的扩展TextField对象,以保持内容的独立性:

Ember.TextFieldTypeahead = Ember.TextField.extend({
    //add some bootstrap specific stuff
    attributeBindings: ['data-provide', 'data-items', 'data-source'],
    'data-source': function(){
            return JSON.stringify(["Alabama", "Washington"]);
    }.property()
});
然后在我的模板中:

{{view Ember.TextField elementId="state" placeholder="NY/New York" valueBinding="state" data-provide="typeahead" data-items="4" data-source="App.router.addStoreTemplateController.statesArray"}}
{{view Ember.TextFieldTypeahead elementId="state" placeholder="NY/New York" valueBinding="state" data-provide="typeahead" data-items="4" data-source=on}}
事情进展顺利。唯一让我困惑的是,这可能是一个余烬bug,也可能只是我框架的noob状态,模板中的data source=可以是任何东西,它仍然引用我声明的函数。在模板中将其保留为“数据源”会在Handlebar构建中产生错误,因此我选择将该值设置为“开”,这样在6个月后,当我出于某种原因重新访问代码时,我不会感到困惑。好奇


我还猜测,我可以进一步扩展此方法以观察“值”,然后在值更改时,使用服务器响应的ajax调用填充“数据源”属性以满足动态需求。

尝试此方法时,我收到一个错误:“未捕获错误:断言失败:属性必须是数字、字符串或布尔值,而不是阿拉巴马、华盛顿”-我只返回[“阿拉巴马”、“华盛顿”]从我的控制器功能来看…我非常震惊,我需要一个库来做这样简单的事情。在我接受答案之前,我会再等一段时间。我用过这个,但在最新的Ember RC中,它被破坏了。知道为什么吗?不。我已经将我的Ember实现转换为AngularJS,从那以后就再也没有回头看。我想要有一天我长大了……爱这句话:)