angular-ui-select2和breezejs:输入2个字符后加载ajax列表

2023-12-31

我有一个项目,我使用 BreezeJS 从我的网络服务器获取数据。我将 AngularJS 与 ui-select2 模块一起使用。目前,当我加载页面时,breezejs 会调用以获取我转储到作用域变量中的数据。从那里,select2 可以轻松地引用它并进行相应的构建。

如果我想要 ajaxify 东西,它会变得非常棘手。我希望能够使用 select2 的 ajax 或查询支持,但我不想使用它来获取数据,而是想使用 Breezejs 来做到这一点。因此,在页面加载期间,直到我在进行 ajax 获取之前开始输入 X 个最少字符之前,不会加载任何内容。

限制条件: 我不想使用 select2 的“ajax”获取数据。我希望 BreezeJS 处理服务调用。当我使用 ajax 时,每次我按下一个字符时,它都会进行 ajax 调用以过滤结果(类似于自动完成)。我只希望列表加载一次,然后使用本机过滤。

这是我到目前为止所拥有的:

微风js-StateContext.JS

m.app.factory('StateContext', ['$http', function ($http) {
    configureBreeze();

    var dataService = new breeze.DataService({
        serviceName: "/Map/api",
        hasServerMetadata: false
    });

    var manager = new breeze.EntityManager({ dataService: dataService});

    var datacontext = {
        getAllStates: getAllStates
    };
    return datacontext;


    function getAllStates() {
        var query = breeze.EntityQuery
                .from("States");
        return manager.executeQuery(query);
    }


    function configureBreeze() {
        breeze.config.initializeAdapterInstances({ dataService: "webApi" });
    }
}]);

这有效并正确返回我的 json 对象。

这是我调用该服务的方式:

m.app.controller('LocationCtrl', ['$scope', 'StateContext', function ($scope, StateContext) {

    $scope.getAllStates = function () {
        StateContext.getAllStates().then(stateQuerySucceeded).fail(queryFailed);
    }
    $scope.getAllStates();


    $scope.states = [];
    function stateQuerySucceeded(data) {
        data.results.forEach(function (item) {
            $scope.states.push(item);
        });
        $scope.$apply();

        console.log("Fetched States");
    }

    function queryFailed(error) {
        console.log("Query failed");
    }

    $scope.select2StateOptions = {
        placeholder: "Choose a State",
        allowClear: true,
        minimumInputLength: 2
    };
}

这是我的 html:

<div ng-app="m" id="ng-app">
    ...
    ...

    <select ui-select2="select2StateOptions" ng-model="LocationModel.State">
        <option value=""></option>
        <option ng-repeat="state in states" value="{{state.id}}">{{state.name}}</option>
    </select>
</div>

目前,html select2 控件在页面加载时加载。但我希望拥有它,这样当我输入超过 2 个字符时,我就能够调用 $scope.getAllStates();作为 ajax 调用。在为 webapi 配置 BreezeAdapter 时,BreezeJS 已经原生使用了 ajax。

我正在考虑使用select2的ajax或查询调用..但我宁愿使用微风来获取数据,因为它使查询可扩展,并且我不想违反我的设计模式,或者使代码更难维护,并且我不希望每次在文本框中输入新字符时都进行 ajax 调用,我只希望它发生一次。

关闭尝试:

将我的 html 更改为:

<!-- Select2 needs to make this type="hidden" to use query or ajax, then it applies the UI skin afterwards -->
<input type="hidden" ui-select2="select2StateOptions" ng-model="LocationModel.State" /><br />

在我的控制器中,更改 select2StateOptions:

$scope.select2StateOptions = {
    placeholder: "Choose a State",
    allowClear: true,
    minimumInputLength: 2,
    query: function (query) {
        debugger;
        var data = StateContext.getAllStates().then(stateQuerySucceeded).fail(queryFailed);
    }
};

问题就在这里。 BreezeJS 使用 Q 库,它利用了一种称为“promise”的东西;这是一个承诺,在进行 ajax 调用后将返回数据。问题在于,查询函数期望填充数据,但调用“stateQuerySucceeded”函数的承诺是从查询函数返回后生成.

所以它首先命中查询函数。然后点击 getAllStates()。从查询返回(未填充任何内容),然后调用“stateQuerySucceeded”。

换句话说,即使我已经能够获取数据,但这已经太晚了.. select2 的查询函数没有在正确的时间接收数据,并且我的 html select 挂在带有搜索微调器的“正在搜索...”上.gif。


我真的不知道这个角度 ui-select2 控件 http://ivaynberg.github.io/select2/。我认为文档的相关部分是这个例子:

$("#e5").select2({
    minimumInputLength: 2,
    query: function (query) {
       var data = {results: []}, i, j, s;
        // simulate getting data from the server
        for (i = 1; i < 5; i++) {
            s = "";
            for (j = 0; j < i; j++) {s = s + query.term;}
            data.results.push({id: query.term + i, text: s});
        }
        query.callback(data);
    }
});

我将忽略这样一个事实:您似乎对使用用户在查询中输入的两个或多个字符不感兴趣(也许您只是将其遗漏了)。我将继续进行在我看来无意义的操作,即在用户输入任意两个字母后获取所有状态。

我认为你缺少的是query.callback这是告诉“angular-ui-select2”数据何时到达。我猜你想打电话query.callback在你的成功函数中。

$scope.select2StateOptions = {
    placeholder: "Choose a State",
    allowClear: true,
    minimumInputLength: 2,
    query: function (query) {
        StateContext.getAllStates()
                    .then(querySucceeded).catch(queryFailed);

       function querySucceeded(response) {
            // give the {results:data-array} to the query callback
            query.callback(response);
       }

       function queryFailed(error) {
           // I don't know what you're supposed to do.
           // maybe return nothing in the query callback?
           // Tell the user SOMETHING and then
           query.callback({results:[]});      
       }
    }
};

正如我所说,我只是根据快速阅读文档进行猜测。将此答案视为一个“提示”,请不要指望我会遵循并使其真正发挥作用。

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

angular-ui-select2和breezejs:输入2个字符后加载ajax列表 的相关文章

  • 服务中的 AngularJS 变量未在视图中更新?

    我花了几天时间把头撞在桌子上 阅读博客文章 以及围绕我的问题提出的问题 我尝试了下面代码的几种变体 但到目前为止没有一个有效 我将不胜感激任何帮助 服务内的 taskList 变量会更新 但控制器中的变量不会更新 控制器 angular m
  • 刷新页面时保留页面数据

    我是角度新手 我正在使用一项服务 该服务获取对象列表并将其显示在第一页上 然后根据单击的对象 我在下一页上设置选项卡标题 但是 当我刷新页面时 列表的范围丢失 并且选项卡标题引发异常 导致页面不显示信息 即使刷新第二页 是否有任何方法可以保
  • JSON 数据的动态表单(不同类型)

    我尝试使用 JSON 中的数据在 AngularJS 中创建动态表单 我有这个工作 HTML p p
  • 使用 angularjs 为多选下拉列表分配默认值

    我正在使用这个插件http dotansimha github io angularjs dropdown multiselect http dotansimha github io angularjs dropdown multisele
  • 如何重置表单中的 $dirty

    我在使用时遇到一个问题 dirty在我的申请表中 问题是一旦您更改表单字段 值 dirty将被设置为true但现在当您撤消更改时 它不会重置 dirty价值false 我们可以重置 dirty价值false手动但之后当您再次更改表单字段值时
  • 如何并排展开和折叠三个div?

    document ready function toggle click function if this data name show sidebar animate width 10 hide map animate width 89
  • ng-bootstrap ngbDropdown 在 Angular 4 中不起作用

    在我的 Angular 4 应用程序中 ng bootstrap 中的 ngbDropdown Element 不起作用 对于这种情况 我安装了以下 npm 模块 ng bootstrap ng bootstrap 1 0 0 alpha
  • 在 Karma+AngularJS 测试中加载模拟 JSON 文件

    我有一个 AngularJS 应用程序 使用 Karma Jasmine 设置了测试 我想测试一个函数 它接受一个大型 JSON 对象 将其转换为应用程序其余部分更容易使用的格式 然后返回转换后的对象 就是这样 对于我的测试 我希望您有单独
  • AngularJS,使用没有后退按钮刷新的路由

    我在用着angularJS使用 AJAX 构建一个简单的单页应用程序 但是当用户使用本机后退按钮时我遇到了问题 angular module myApp ionic myApp controllers myApp services conf
  • ng-include 跨域帮助 angularjs

    我正在尝试为加载到 ng include 跨域的 url 实现白名单 这是一场噩梦 我有一个在本地运行良好的包含 div div 然后我像这样添加白名单 angular module myApp ngRoute ngResource con
  • 为 HTML5 Django Web 应用程序实现实时通知系统

    我目前正在开发一个由 Django apache 提供服务的 HTML5 Web 应用程序 该应用程序的目标是监视多个设备 所有客户端逻辑都是用 Angular 编写的 所有数据都来自对后端进行的基于 JSON 的类似 REST 的调用 我
  • 如何创建自定义输入类型?

    例如 我想创建一个类似于 AngularJS 实现 电子邮件 的方式的自定义输入类型
  • 函数调用后的两组括号

    我正在寻找如何filters http docs angularjs org api ng 24filter在 Angularjs 中工作 我发现我们需要发送 2 组括号 filter number number fractionSize
  • 在 AngularJs 中动态更改按钮文本

    我正在使用 AngularJS CSS 和 HTML 这就是我想做的 根据某个函数的输出禁用按钮isPublished 我需要将鼠标悬停在按钮上 就像禁用按钮时 将鼠标悬停在文本上可能是 I m disabled 当它没有被禁用时 悬停在文
  • Angularjs 模式的复选框表现得很奇怪

    我有一个有角度的应用程序plunker http plnkr co edit rac8w9g8L0eX8mlXKuVn p preview 当我们单击该按钮时 它会打开一个包含项目列表的模式对话框 其中 2 项是根据复选框表输入中的条件进行
  • Angularjs 手表服务对象

    为什么我无法观看服务中的对象 我有一个简单的变量可以工作 但是一个对象不能工作 http plnkr co edit S4b2g3baS7dwQt3t8XEK p preview http plnkr co edit S4b2g3baS7d
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 包含routeChangeSuccess的AngularJS测试控制器

    我正在尝试创建单元测试来测试导航列表控制器 但在创建测试时遇到问题 这是控制器的代码 navListModule controller NavListCtrl scope NavList function scope NavList sco
  • 导航嵌套组件时创建面包屑 (Angular 2)

    我正在为此苦苦挣扎 这个想法是有一个组件 当浏览子视图时更新面包屑 例如
  • 在 Angular 中让多个调用等待同一个 Promise

    我在一个页面上有多个使用相同服务的控制器 为了举例 我们将服务称为 USER 第一次调用 USER getUser 时 它会发出 http 请求来获取有关用户的数据 调用完成后 它将数据存储在 USER data 中 如果再次调用 USER

随机推荐

  • C# 通用约束问题

    我收到以下错误 类型 Test ICacheProvider 不能用作类型参数 泛型类型或方法中的 TStorageProvider StorageManager Test IFileInfo 没有 隐式引用转换自 StorageManag
  • 将 blob 转换为图像流并将其分配给 jLabel

    我只是想将数据库中的 blob 字符串转换为字节数组 然后在转换后将其转换为缓冲图像 然后将其分配给标签 这是我的代码 package ims project import java sql import javax swing impor
  • jQuery 仅获取此元素的父同级元素

    我不知道如何写这个 请参阅我的标记结构 该结构在页面上重复多次 div class module div class archive info span class archive meta open span div div class
  • Google 地图 fitBounds 无法正常工作

    我对 googlemaps fitBounds 函数有疑问 for var i 0 i lt countries length i var country countries i var latlng new google maps Lat
  • JavaScript 中去除字符串中的所有非数字字符

    考虑一个非 DOM 场景 您希望使用 JavaScript ECMAScript 从字符串中删除所有非数字字符 范围内的任何字符0 9应该保留 var myString abc123 8
  • 如何高效解析固定宽度文件?

    我正在尝试找到一种有效的方法来解析包含固定宽度行的文件 例如 前 20 个字符代表一列 从 21 30 开始代表另一列 依此类推 假设该行包含 100 个字符 将一行解析为多个组成部分的有效方法是什么 我可以对每行使用字符串切片 但如果行很
  • 具有多个条件的布尔索引[重复]

    这个问题在这里已经有答案了 我有一个熊猫DF我需要去哪里filter输出一些包含特征 a 和特征 b 的值 0 的行 为了检查这些值 我运行以下命令 DF1 DF DF a 0 它返回正确的值 同样 通过这样做 DF2 DF DF b 0
  • 来自 Pyspark ArrayType 列的随机样本

    我在 Pyspark 数据框中有一列 其结构如下 Column1 a b c d e c b d f g h i p l m 我想返回另一列 其中随机选择每行中的每个数组 以及函数中指定的数量 所以像data withColumn samp
  • 在套接字上多次调用listen——预期的行为?

    我在使用简单的基于 C 的服务器时注意到一些奇怪的事情 我的 Linux 4 10 3 系统上的程序 我不小心打通了电话listen 我在套接字上两次 来自服务器进程 被称为bind 早些时候 我注意到两个监听电话 成功 没有任何错误 事实
  • NSRulerView 如何将行号与正文正确对齐

    我在 MacOS 中使用 NSRulerView 来显示 NSTextView 旁边的行号 两个视图共享相同的字体和相同的字体大小 但是 在 NSTextView 中 字符串渲染是自动管理的 而在 NSRulerView 中 我需要计算正确
  • Symfony2 - 如何在控制器中使用 __construct() 并访问 Securty.Context?

    我在使用 Symfony2 时遇到了一些问题 即如何使用 construct 函数 官方文档非常糟糕 我希望能够使用以下内容 public function construct parent construct user this gt g
  • 修改Go GRPC服务器流拦截器上的元数据

    我一直在尝试在服务器流拦截器上设置元数据 以便实际的 RPC 函数可以在下游读取它们 func UserIDInterceptor srv interface ss grpc ServerStream info grpc StreamSer
  • 在 TestCafe 中测试运行期间累积所有 JS 警告和错误

    我希望能够在测试运行期间从浏览器控制台访问所有 J S 警告和错误 禁用 e 跳过 JS 错误 标志后 测试会在第一个错误处停止 因此显然它正在寻找它们 启用此标志后 我希望能够查看测试运行期间触发了哪些错误 最好是警告 我尝试过使用 Cl
  • 如何在没有请求正文的情况下发出 OKHTTP post 请求?

    有没有办法使用 OkHTTP 发出没有请求正文的 post 请求 RequestBody reqbody RequestBody create null new byte 0 Request Builder formBody new Req
  • 在 JavaScript 中等待不仅仅是将所有内容包装在 setTimeout 中

    因此 我正在创建一个机器人来在线玩视频游戏 完全合法 有一个用于机器人比赛的服务器 不用担心 代码是用 JavaScript 编写的 我现在刚刚开始学习 但我很难告诉机器人做某事 然后按时间或按条件等待 直到做其他事情 到目前为止 我只是将
  • OAuth2不同的客户端认证方式

    我有一个充当 OAuth 1 0a 提供商的 Web 服务 Web 应用程序通过 OAuth 1 工作流程来获取对用户资源的访问权限 到目前为止 一切都很好 客户端 Web 应用程序需要与服务进行通信以满足其他需求 以交换未链接到特定用户
  • 协助在我的本地主机应用程序上下载文件

    我有一个 ReactJS 网络应用程序 在其中一个页面上 我希望用户单击下载按钮 然后能够下载我的 pdf 文件assets文件夹 我在尝试执行此操作时似乎遇到了一些问题 这是我尝试过的 作为参考 我已经尝试过此中提出的解决方案questi
  • 从 Telegram 机器人获取用户的“Last Seen”?

    当我与 Telegram 用户聊天时 我可以看到每个用户的 最后一次见面 他们上次连接到 Telegram 的时间 即使我有一段时间没有与他们聊天 有没有办法通过机器人查询这些信息API https core telegram org bo
  • 已加载笔尖但未设置视图出口 - Swift 版

    我有一个项目 除了我的视图控制器是用 Swift 编写的之外 全部都是用 Objective C 编写的 当我运行它时 我收到错误 由于未捕获的异常而终止应用程序 NSInternalInconsistencyException 原因 UI
  • angular-ui-select2和breezejs:输入2个字符后加载ajax列表

    我有一个项目 我使用 BreezeJS 从我的网络服务器获取数据 我将 AngularJS 与 ui select2 模块一起使用 目前 当我加载页面时 breezejs 会调用以获取我转储到作用域变量中的数据 从那里 select2 可以