- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我下载了一个名为 jsdeferred
的库来尝试帮助我解决一些代码流问题,但我有点迷茫,因为它的示例和...“文档” 在某些事情上有点不清楚。但是当我继续阅读和挖掘,当然还有谷歌搜索阳光下的一切时,我还发现 jQuery 有它自己的 Deferred()
系统。为了适当的上下文,我在此处链接了两者。
我需要找到一种方法来告诉页面“坚持到最后一件事完成”。
这就是 thought jsdeffered
所做的。所以我的部分问题是问我应该使用哪个? jsDeferred 或 jQuery.Deferred(); 然后是如何使用它,正如我在下面概述的那样。
我的场景是这样的,简而言之,我需要执行以下行为。
View 模型
被定义这是使用 kendo ui mvvm
来声明我的 View 模型,所以它是一个 kendo.data.ObservableObject
$.ajax
调用以获取一些默认模型数据这是我遇到最多麻烦的地方。在 $.ajax
完成之前,我需要一切“坚持”。但是,如果可以的话,我不想将所有内容都包装在 $.ajax().done(r)
中。这对我来说看起来/感觉起来很草率,有时会让人感到困惑。
kendo ui Remote DataSource
完成各自的数据库查询。这些实际上按预期工作。
jQuery Validate
已连接到 View ,默认值已设置。这也按预期工作。
kendo.bind('body', viewModel);
被调用以执行模型绑定(bind)。现在这就是我遇到麻烦的地方,回到第 2 步
我进行 $.ajax
调用的地方。不断发生的是 kendo.bind
在 $.ajax
完成之前被触发。我可以将它放在 $.ajax({}).done();
函数中,对于确实有效的这个特定页面,但会有很多其他不适合的情况。
首先,我要明确的是,jsdeferred
文档对我来说不是很清楚,因为逐字运行它的示例实际上并没有用。我不断地被告知 next is not defined
等等。我最终发现,在第一次调用 next
之前,您必须有一个隐式的 Deferred.
。
这就是我认为会发生的事情......
var viewModel = new kendo.data.ObservableObject({
// various view model properties defined
});
Deferred.define();
next(function() { // let's call this STEP 1
$.ajax({
// data for ajax to controller
}).done(function(result) {
// perform operations with result
});
}).
next(function() { // let's call this STEP 2
$('#dropdownlist_target').kendoDropDownList({
// parameters, remote data source for drop down list, etc.
}).data("kendoDropDownList");
}).
next(function() { // let's call this STEP 3
$('form').validate({
// any extra form validation stuff
});
}).
next(function(){ // let's call this STEP 4
kendo.bind('body', viewModel);
});
我相信当前一个完成时,它们会各自运行一个,紧接着另一个。但这不是正在发生的事情。 STEP 1
仍在获取过程中,而 STEP 2、3
和 4
正在运行。
这似乎与没有 jsdeferred
库的代码运行方式没有任何不同。所以我很困惑,绝对会在这里得到一些帮助。基本上,我需要在 STEP 2
触发之前完全完成 STEP 1
。
最佳答案
问题是 next()
希望您返回您希望它等待的东西。在第一步中,您不会返回任何东西。因此,jsdeferred
假设您正在执行同步操作(已经完成),因此它会继续第 2 步。
相反,返回从 $.ajax()
调用返回的 jQuery.Deferred()
。然后 jsdeferred 将等待它完成然后它执行第 2 步。
无论如何,我都会转储 jsdeferred
。正如您所意识到的,jQuery 具有完全成熟的 Deferred 实现。我不确定 jsdeferred 给聚会带来了什么。
使用 $.ajax().done(r)
一点都不马虎。异步行为是事件驱动语言的核心,JavaScript 就是其中之一。拥抱它,否则你会在生命的早期非常试图避免它。
如果你恢复到 jQuery 的 Deferred 实现,你可能会喜欢 then()
, 为您提供 next()
;
$.ajax({
// data for ajax to controller
}).done(function(result) {
// perform operations with result
}).then(function () {
$('#dropdownlist_target').kendoDropDownList({
// parameters, remote data source for drop down list, etc.
}).data("kendoDropDownList");
$('form').validate({
// any extra form validation stuff
});
kendo.bind('body', viewModel);
}).then(function () {
// Note you can chain then()'s as well.
});
关于javascript - jQuery Deferrable、Deferred 和 jQuery Deferred 之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24286706/
可以在触发器中使用 DEFERRABLE 吗? DEFERRABLE 的概念是如何工作的? 它在整个事务期间然后在所有操作结束时检查约束? 最佳答案 看起来您的意思是 PostgresSql。一个DE
我的问题是,deferral.complete() 方法到底是做什么的,这个方法调用事件 task.Compledet,还是有办法调用一个我的类 BackgroundSyncer 中 Backgrou
我想从两个表中删除行,这两个表通过一组可延迟约束相互依赖。为了简化这篇文章,我模拟了一个简单的数据库架构。 我希望从 SQL 事务/数据库补丁中的某个表“delete_from_me”中删除条目。问题
我有一个类似于以下的函数: function refreshData() { service.getSettings().done(function (settings) {
我有以下操作来使用 node_redis 创建用户: server.post('/create_user', function(req, res, next) { console.log(req.b
使用 Doctrine2 和 PostgreSQL 我需要创建外键约束 DEFERRABLE 和 INITIALLY DEFERRED 在 Doctrine/DBAL/Platforms/Postgr
我可以使用以下查询添加 DEFERRABLE INITIALLY DEFERRED: ALTER TABLE user DROP CONSTRAINT unq_user_address, add CO
我正在尝试使用 postgresql 数据库为 django 中的表模型设置约束。 我可以用这句话通过 postgresql 来完成: ALTER TABLE public.mytable ADD C
关于 this answer我偶然发现了一个我无法解释的现象。 版本: x86_64-unknown-linux-gnu 上的 PostgreSQL 9.1.2,由 gcc-4.4.real (Deb
我下载了一个名为 jsdeferred 的库来尝试帮助我解决一些代码流问题,但我有点迷茫,因为它的示例和...“文档” 在某些事情上有点不清楚。但是当我继续阅读和挖掘,当然还有谷歌搜索阳光下的一切时,
我现在正在使用 EventMachine 玩了几天,恕我直言,它的学习曲线很陡;-) 我尝试通过触发回调中需要的 HttpHeaderCrawler.query() 来返回哈希。但是在这种情况下我得到
iOS playground 设置如此简单: import UIKit import SpriteKit import XCPlayground let s = CGSize(width: 300,
我尝试将 Django 连接到 Azure SQL,但在开始迁移命令时出现错误 KeyError: deferrable。我找不到此问题的解决方案。 我使用这个应用程序: asgiref==3.2.1
iced coffeescript 中的“过度使用延迟”警告是什么意思?当我在代码中抛出一个 Uncaught Error 时,它似乎会发生。我怎样才能让错误冒出来,因为我需要它是单元测试的未捕获错误
我正在尝试使用 Many:Many 与 Sequelize 的关联(针对 Postgre db)。 我想创建一个场所并将其与单个事务中的用户相关联。 field 和用户设置为正常的Sequelize模
I understand why the deferred parameter is needed, but the presence of two parameters 'initiallyD
我在 PostgreSQL 上使用 Fluent NHibernate,我想将 FOREIGN KEY 设置为 DEFERRABLE,但除了外键的名称外,我找不到自定义任何内容的方法。 谢谢。 最佳答
我是一名优秀的程序员,十分优秀!