Ember:处理组件中来自 ember-network Promise 的 JSON 响应

2024-01-17

我正在尝试在组件中实现一个简单的自动建议。我正在测试 fastboot,因此使用 ember-network 与我的 API 进行通信。我现在没有使用 ember-data 。这是否是“余烬”方式是一个不同的问题......我只是想让它发挥作用。

我的组件 JS:

import Ember from 'ember';
import fetch from 'ember-network/fetch';

export default Ember.Component.extend({
    searchText: null,

    loadAutoComplete(query) {
        let suggestCall = 'http://my.api.com/suggest?s=' + query;
        return fetch(suggestCall).then(function(response) {
            return response.json();
        });     
    },

    searchResults: Ember.computed('searchText', function() {
        let searchText = this.get('searchText');
        if (!searchText) { return; }
        let searchRes = this.loadAutoComplete(searchText);
        return searchRes;
    })
});

并在模板中:

{{input type="text" value=searchText placeholder="Search..."}}

{{ log "TEMPALTE RESULTS" searchResults }}
{{#each-in searchResults as |result value|}}
<li>{{result}} {{value}}</li>
{{/each-in}}

模板日志指令在我的控制台中输出:

数据在“建议”中,所以我知道提取正在工作。我只是不知道如何得到它。我无法循环“_result”。我需要做什么来解析它并在模板中使用它?


从计算属性返回承诺不仅简单,而且有点棘手。

选项1。您可以使用Ember并发 https://github.com/machty/ember-concurrency此用例的插件。你可以看看自动完成功能说明文档 http://ember-concurrency.com/#/docs/examples/autocomplete

您的组件代码,

import Ember from 'ember';
import { task, timeout } from 'ember-concurrency';

export default Ember.Component.extend({
    searchText: null,

    searchResults: task(function*(str) {
        this.set('searchText', str);
        let url = `http://my.api.com/suggest?s=${str}`;
        let responseData = yield this.get('searchRequest').perform(url);
        return responseData;
    }).restartable(),
    searchRequest: task(function*(url) {
        let requestData;
        try {
            requestData = Ember.$.getJSON(url);
            let result = yield requestData.promise();
            return result;
        } finally {
            requestData.abort();
        }
    }).restartable(),
});

和你的组件 hbs 代码,

<input type="text" value={{searchText}} onkeyup={{perform searchResults value="target.value"  }}>
<div> 
     {{#if searchResults.isIdle}}
        <ul>
            {{#each searchResults.lastSuccessful.value as |data| }}
            <li> {{data}} </li>
            {{else}}
             No result 
            {{/each}}
        </ul>
    {{else}}
        Loading...
    {{/if}} 
</div>

选项2。您可以返回 DS.PromiseObject 或 DS.PromiseArray

import Ember from 'ember';
import fetch from 'ember-network/fetch';

export default Ember.Component.extend({
    searchText: null,

    loadAutoComplete(query) {
        let suggestCall = 'http://my.api.com/suggest?s=' + query;
        return fetch(suggestCall).then(function(response) {
            return response.json();
        });
    },

    searchResults: Ember.computed('searchText', function() {
        let searchText = this.get('searchText');
        if (!searchText) { return; }
        //if  response.json returns object then you can use DS.PromiseObject, if its an array then you can use DS.PromiseArray        
        return DS.PromiseObject.create({
            promise: this.loadAutoComplete(searchText)
        });
    })
});

参考余烬点火器文章-计算属性中的 Promise 指南 https://emberigniter.com/guide-promises-computed-properties/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ember:处理组件中来自 ember-network Promise 的 JSON 响应 的相关文章

  • 从“编辑”导航回“显示”后,URL 包含“未定义”而不是 id

    我读了Ember 应用程序结构 http emberjs com guides outlets指南 现在我尝试使用 ember js 创建一个简单的单页应用程序 我的主页显示了一个包含 Post 对象列表的侧边栏 当我单击列表项时 在侧边栏
  • 使用(现在默认)Ember Data JSON-API 适配器处理错误

    我使用的是 Ember 1 13 7 和 Ember Data 1 13 8 它们默认使用 JSON API 标准来格式化发送到 API 和从 API 接收的有效负载 我想使用 Ember Data 的内置错误处理来向用户显示红色 错误 表
  • 在 Ember.js 中,为什么绑定到数组在 {{#each}} 之外不起作用?

    在下面的代码中 我渲染了 3 个视图 第二个和第三个视图渲染App controller a 单击第一个视图会发生变化App controller a 单击时 第三个视图会更新其内容 第二个视图不更新其内容 为什么 我认为第二个视图绑定到数
  • Ember.js - 根据对象属性更新 CSS 宽度

    正如中提到的 安多罗夫的回答 https stackoverflow com a 32593118 565877 OP的理想代码 div style width 1 现在从 Ember 1 10 开始几乎可以正常工作 我是 Ember js
  • 在车把模板中显示 hasMany ember 关系中的第一项

    我需要显示 hasMany 关系中的第一项 基本上一个线程可以有多个作者 但我只需要在特定模板中显示第一个作者 我有以下 json threads id 1 authors 2 3 authors id 2 fullname foo id
  • Ember Data 未找到模型,但它显然存在

    我和其他许多人一样将我的 ember 应用程序升级到了最新版本 但升级后 我的应用程序仍然无法工作 我已经简化了很多 这归结为我的路线 我的路线是这样的 按照过渡指南中的建议 App BoxesRoute Ember Route exten
  • Action Cables、嵌套 JSON 属性和 JSONAPI

    我有一个相当具体的问题 我希望你们中的一个真正聪明的人可能知道解决方案 甚至是现阶段的解决方法 具体来说 我正在处理操作电缆 嵌套 JSON 和 JSONAPI 我有一个asset模型 它具有一些属性 例如name desc等等 但它还有一
  • 特定模型的自定义 REST url

    Ember 有没有办法为特定模型配置自定义 REST url 就像这个模型一样 App Post DS Model extend title DS attr string comments DS hasMany App Comment Ap
  • Ember 未在生产环境中加载某些图像

    我有一个 Ember cli 1 13 应用程序 它在公共目录中存储了很多图像 现在 它将正确加载除特定组件中的图像之外的所有图像 该组件的调用方式如下 list item url list url name List Name price
  • 如何将子记录添加到现有父记录中?

    我一直在 Google 和 Stack Overflow 上搜索有关这个主题的某种提示 但信息充其量是分散的 我正在尝试创建一个新的子记录 Comment 并将其保存到现有的父记录 Post 我使用的是 Ember Model 而不是 Em
  • 使用 store.findQuery 时捕获 404 错误

    我正在使用余烬findQuery方法并想知道如何在没有结果时捕获 404 错误 this store findQuery customer hasProjects true getArchivedProjects archived then
  • 将 Ember 组件附加到不受 Ember 管理的 DOM 元素

    我想附加一个 Ember 组件ComponentB到由某些非 Ember UI 库生成的 DOM 元素didInsertElement of ComponentA 导致类似的结果 div class ember view component
  • 如何清除ember js中的表单数据

    嗨 我对 ember js 很陌生 我写了一个新员工入职表格 并通过路线发送数据 数据保存成功 但问题是提交表单后我的表单数据没有清除 代码如下 app js App Router map function this resource sa
  • ember js 子视图和 didinsertelement 事件

    我正在写一个Ember View 它将树结构变成菜单 我需要递归 所以我在视图模板中使用的是 view helper 它递归地调用自身来构建嵌套 ul li 结构 我需要的是一个钩子来调用一些 jQuery 插件来将此结构转换为菜单 当我从
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • Emberjs 将多个控制器加载到一个控制器中

    SCENARIO我目前有一个IndexRoute 我想将另外 3 个控制器加载到其中 另外 3 个控制器称为Sports News Business 我阅读了 embersjs 文档 它指出您需要实现renderTemplate钩入Inde
  • Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

    我主要了解 Ember JS 的基础知识 大多数示例实际上只处理单个控制器和模型以在页面上显示某些内容 我真的很想用 Ember 构建一个完整的 Web 应用程序 所以有人能告诉我如何组织和连接多个控制器 模型和视图到一个页面中吗 例如 如
  • Emberjs不会加载jquery/javascript,在页面中插入html时运行代码

    Help 我正在开发一个丰富的 emberjs yeoman 项目 该项目使用多个 hbs 模板 这些模板都可以从一个 application hbs 的侧边栏路由到 问题是当我加载页面时 有时使侧边栏折叠的 Jquery 不起作用 而同一
  • 绑定 Ember TextField 中的计算属性

    我正在尝试将我的数据模型绑定到 Ember js 中的文本字段 该模型有一个表示货币值的字段 例如 1 000 50 然后用户可以更改该值 Ember 接收数字 1000 50 形式的数据 非货币格式 我将视图绑定到具有良好格式的计算属性
  • 使用 ember.js 模板的 Bootstrap Popovers

    我正在尝试使用引导程序弹出窗口 http twitter github io bootstrap javascript html popovers使用 EmberJS 这样弹出窗口的内容将是 ember handlebars 模板 带有绑定

随机推荐

  • 获取图像来拉伸 div

    如何让图像拉伸高度DIV class 目前它看起来像这样 不过 我想要DIV被拉伸所以image适合 但我不想调整 图像 的大小 这是 CSSDIV 灰色框 product1 width 100 padding 5px margin 0px
  • 从 SPARQL 查询返回嵌套数据结构

    如果我有一个具有这种结构的图 prefix
  • Oracle 软件包的版本控制?

    幸运的是 我必须与 Oracle 合作 还有包裹 我有一个包 很多不同的开发人员都在接触它 这让我感到害怕 是否可以将包放入版本控制中 是否有某种软件已经可以做到这一点 如果没有 是否有某种出口程序 我可以从文件系统中抓取文件吗 他们如何输
  • getLocalAddress() 返回 0.0.0.0

    我正在尝试使用套接字编写程序 并且需要获取自己的本地 IP 地址 当我在套接字中使用 getLocalAddress 时 我只得到 0 0 0 0 这是我的一小段代码 DatagramSocket socket DatagramPacket
  • 删除asp mvc中的本地主机url

    只是在尝试正确显示来自外部站点的图像时遇到问题 但 mvc 约束链接并自动在所有内容的开头添加 localhost url 即使使用自定义路由 这也是无法避免的 例如我需要 www google com finance chart q NY
  • TouchID 在某些 iPhone 5S 设备上崩溃

    我的应用程序在某些 iPhone 5S 设备 仅部分 上崩溃并出现错误 致命异常 NSInternalInconsistencyException 意外错误 错误域 NSCocoaErrorDomain 代码 4097 该操作无法 完全的
  • Django - 编辑 HTML 表行并更新数据库

    我创建了一个 HTML 表 它包含一些信息 不过 我想添加编辑表行文本的可能性 并通过单击 保存 数据库将被更新 有人能帮我吗 我需要使用 Ajax 吗 如果是这样 我可以获得一些指导吗 table style width 100 tr t
  • python 版本如何影响 Azure Functions?

    I m 发展使用 Python 的 Azure 函数3 10 10在我的机器上 通过 Azure DevOps 部署该功能building使用 Python 的工件3 6 8 以及Python Version显示为功能应用程序host is
  • 在 Kotlin 中将 ByteArray 转换为 Base64

    我正在尝试在用 Kotlin 编写的 Spring 项目中将 ByteArray 转换为 Base64 我检查了现有的帖子 但它们对我没有帮助 实际上 我正在尝试将 blob 转换为 base 但到目前为止我已将 blob 转换为 byte
  • 如何使用 next-routes 处理 % 和 # 字符

    我在用下一个路线 https github com fridays next routes我的应用程序 URL 需要接收参数作为包含 和 字符的名称 例如 C 100 等 所以它的 URL 如下所示 https myapp com name
  • 重复的模式/结构化数据标记?

    这样的结构会不会有问题呢
  • Libgdx 使用 TiledMap 进行碰撞检测

    我正在努力通过平铺地图实现碰撞检测系统 我有一个 2d 口袋妖怪风格 游戏 渲染了平铺地图 具体来说 我的平铺地图 tmx 文件中有一个 碰撞 层 我想与玩家和其他实体进行交互 我的问题是如何将玩家精灵 扩展精灵类 连接到平铺地图的 碰撞
  • 从 C++11 中的函数返回元组的最佳方法是什么?

    我想从函数返回一些值 并且想将其打包在一个元组中 所以我有两种函数声明的可能性 std tuple
  • 如何调试使用 boost 的代码而不失去理智?

    Boost 是一组很棒的库 它确实boosts生产率 但是调试使用它的代码完全是一场噩梦 当然 逐步浏览两万个头文件可能是一项有价值的智力练习 但如果您需要一遍又一遍地这样做怎么办 是否有一种对开发人员友好的方法来跳过升压部分并让调试器直接
  • 为什么 ml_create_dummy_variables 在 Sparklyr 中不显示新的虚拟变量列

    我正在尝试在 Sparklyr 中创建模型矩阵 有一个功能ml create dummy variables 用于一次为一个分类变量创建虚拟变量 据我所知 没有 model matrix 等效于一步创建模型矩阵 很容易使用ml create
  • 添加/删除 UIBarButtonItem 的 EventHandler

    人们可以定义一个EventHandler在构造函数中 UIBarButtonItem logoutButton new UIBarButtonItem UIBarButtonSystemItem Stop logoutButtonEvent
  • PhantomJS .click() 不起作用

    此代码不起作用 var page require webpage create page open http www ebay com function console log Page loaded page includeJs http
  • Web Speech API 中语法的效果

    在 Web Speech API 的示例中 始终指定语法 例如 在MDN 的颜色变化示例 https github com mdn web speech api blob master speech color changer script
  • 如何使 python 单元测试在从不同工作目录运行时始终找到测试数据文件?

    这是一个关于测试环境设置的问题 在我的项目中 我有一些访问测试数据文件的单元测试 这些单元测试可以通过测试运行器从我的项目目录运行 或者 我可以单独运行每个测试文件 模块 例如出于调试目的 问题是 根据我运行测试的位置 当前目录是不同的 因
  • Ember:处理组件中来自 ember-network Promise 的 JSON 响应

    我正在尝试在组件中实现一个简单的自动建议 我正在测试 fastboot 因此使用 ember network 与我的 API 进行通信 我现在没有使用 ember data 这是否是 余烬 方式是一个不同的问题 我只是想让它发挥作用 我的组