跟踪集合的旧部分和新部分

2024-03-17

我正在使用backbone.js,并且我有一个包含 dos 的集合fetch()有时。我不想通过该选项{add: true}由于我的子视图的创建方式(集合被循环,每个项目都是附加到当前表的新行)。我尝试的一件事就是清空整个表并创建所有新行,但这太慢了,因为fetch()经常运行(当滚动接近表格末尾时)。它开始滞后。

我希望有一种替代方案,我可以跟踪新集合以用于附加目的,但将整个集合作为一个实体。一种可能性是创建第二个集合,然后将其添加到第一个集合中,但我不确定如何/是否应该这样做。


我认为创建第二个新模型系列是多余的。我正在尝试想象您的设置,这里有一些解决方案的想法。

也许您可以执行此操作的一种方法是更改​​执行子视图的方式。

当您 fetch() 时,它会重置您的集合,似乎您只需要使用新模型。在这种情况下,使用 fetch 和 {add:true} 听起来是更好的解决方案。您提到您的子视图创建是循环的,我想象当您重置集合时,必须循环并创建所有新的子视图可能会很慢。您可以更改子视图的创建以便与每个模型相对应吗?因此,对于添加到集合中的每个新模型,都会附加一个子视图。

我正在想象类似 Todo.js 示例的内容。但你的问题的背景可能与我所看到的完全不同。

编辑:如何访问您添加到集合中的新模型

根据我们的讨论,我发现这个线程证实了我对获取成功选项和参数的想法。

在 Backbone.js 中,执行 collection.fetch({'add':true}) 后,如何获取检索到的最新元素? https://stackoverflow.com/questions/8425677/in-backbone-js-after-i-perform-a-collection-fetchaddtrue-how-do-i-get-t

EDIT2:完整工作主干示例

这是输出(类似这样):

Pokemon Users

Audino  // These are in our initial collection
Bulbasaur
Charmander
Caterpie  // These are added to our collection using fetch()
Butterfree
Squirtle

这是 HTML:

<body>
    <h1>Pokemon Users</h1>

    <div id="app">
        <div id="userList">     
    </div>
</body>

这是JS:

var User, UserCollection, UserView, AppView;

// Each User model has 1 attribute name
User = Backbone.Model.extend({
    defaults: {
        name: "changeMe"
    }
});

// Our collection of Users
UserCollection = Backbone.Collection.extend({
    model: User,
    url: 'user'
});

// Initialize our collection (nothing in it right now)
var myCollection = new UserCollection;

// Our UserView is each individual view, represented by the user model
UserView = Backbone.View.extend({
    tagName: 'div',
    className: 'user',
    render: function() {
        $(this.el).html(this.model.get("name"));
        return this;
    }
});

// AppView is the larger view that contains the sub-views
AppView = Backbone.View.extend({
    el: $('#app'),
    initialize: function() {
        // Binding the view to collection add events! <- This is the key
        myCollection.on('add', this.addOne, this);    // on/bind
    },
    addOne: function(user) {
        var view = new UserView({model:user});
        $('#userList').append(view.render().el);
    }
});

// Initialize the AppView -> Rock and Roll Time
var myApp = new AppView();

// I'm creating 3 new models
var userA, userB, userC;
userA = new User();
userA.set({name:"Audino"});
userB = new User({name:"Bulbasaur"});
userC = new User({name:"Charmander"});

var userAry = [userA,userB,userC];

// I'm adding these models into my collection
myCollection.add(userAry);

// When you take a look at the collection now, it only has 3 models
console.log(myCollection);

// Now we fetch the other 3 models from the server using {add:true}
// Try commenting this fetch call out to see the output minus new models
myCollection.fetch({
    add: true, success: function(collection, response) {
        // Just some extras to illustrate the success callback and args
        // console.log('collection: ');
        // console.log(collection);
        // console.log('response: ');
        // console.log(response);
    }
});

// The collection is updated rather than reset - necessary subview changes made
console.log(myCollection);

以下是 PHP 服务器代码 - 我使用 Slim PHP 进行路由:

// Returns a JSON Collection
$app->get('/user', function() use ($app) {

    $userD = array("name"=>"Caterpie");
    $userE = array("name"=>"Butterfree");
    $userF = array("name"=>"Squirtle");

    $userAry = array();
    array_push($userAry, $userD, $userE, $userF);

    $json = json_encode($userAry);
    $response = $app->response();
    $response['Content-Type'] = 'application/json';
    $response->body($json);
});

这工作起来很有趣。我自己学到了一些东西。希望能帮助到你! :-)

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

跟踪集合的旧部分和新部分 的相关文章

随机推荐

  • 崩溃报告显示在 App Store Connect 中,但不显示在 Xcode Organizer 中

    我们已将应用程序上传到 TestFlight 进行 Beta 测试 当应用程序在测试人员的设备上崩溃时 崩溃会按预期显示在 App Store Connect 中 但不会显示在 Xcode Organizer 中 管理器中的崩溃选项卡显示了
  • PagedListAdapter.submitList() 更新现有项目时行为异常

    本主题的小故事 应用程序只是在确认后通过对话框更新单击的行的值 在房间数据库上使用分页方案 当添加或删除项目时 会获取最新的数据集并将其传递给submitList方法 然后所有更改都会被看到并且运行良好 问题从这里开始 如果更新了现有项目
  • 设置 AssemblyInfo.cs 的默认值

    更改创建 AssemblyInfo cs 的默认值的最佳方法是什么 例如我不想要 AssemblyCompany 和 AssemblyCopyright 中的 Microsoft 位 assembly AssemblyCompany Mic
  • 使用Python unicode的特殊字符问题

    usr bin env python coding utf 8 def splitParagraphIntoSentences paragraph break a paragraph into sentences and return a
  • Python ctypes 参数与 DLL - 指向双精度数组的指针

    我是一名使用 Python 中的 ctypes 的新手编码人员 并尝试使用用 C 编写的 DLL 中的函数 我在 SO 上发现了很多与我类似的问题 但没有任何答案可以回答此类难题 我已经很好地加载了 DLL 但是我需要调用的函数之一需要一个
  • marionette.js 布局/区域结构和渲染方法示例

    我正在尝试使用 marionette js 作为我的主干应用程序 但我对如何组织布局 区域并渲染它们感到有点困惑 我正在寻找一个具有嵌套布局和区域的示例应用程序 以便我可以更好地理解 有什么建议吗 看看这个小提琴 http jsfiddle
  • Guid.NewGuid() 返回重复项?

    我们有一个应用程序可以为我们的一项服务生成模拟数据以用于测试目的 每个数据项都有一个唯一的 Guid 然而 当我们对模拟器进行一些小的代码更改后运行测试时 它生成的所有对象都具有相同的 Guid 创建了一个数据对象 然后是一个 for 循环
  • Cocoa 应用程序最简单的 Markdown 实现是什么?

    我正在用 Objective C 编写一个 Cocoa 应用程序 并且我希望能够合并 Markdown 用户以 Markdown 语法输入文本 单击 导出 按钮 程序将输出 XHTML 文件 不过 似乎有很多选择 我可以使用其中之一C C
  • 代码契约和异步

    将后置条件添加到返回的异步方法的推荐方法是什么Task
  • 如何检测 Android 应用程序何时最小化?

    如何检测 Android 应用程序何时进入后台 onPause 或 onUserLeaveHint 有效 但在方向更改或呈现另一个活动时也会被调用 标记的答案是OP问题的解决方法 对于我们其他正在寻找答案的人来说 您可以使用以下方法来实现这
  • 如何使用 tablayout 在 vi​​ewpager 中设置当前选项卡

    我有一个使用选项卡布局的自定义视图页面 由于某些原因禁用了滑动 内容根据选择的选项卡而变化 我想用浓缩咖啡测试一下 1 单击特定选项卡 2 查看选项卡特定页面的部分数据 我怎样才能做到这一点 我是浓缩咖啡新手 有几种方法可以做到这一点 一种
  • @PreAuthorize 如何检查角色? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有几个 REST API 我想将安全性置于所有这些之上 以便仅允许某些角色使用这些功能 我将 EnableGlobalMethodSecu
  • torch数据集的结构是怎样的?

    我开始使用 torch 7 我想制作我的数据集进行分类 我已经制作了像素图像和相应的标签 但是 我不知道如何将这些数据提供给火炬 我阅读了其他人的一些代码 发现他们使用的是扩展名为 t7 的数据集 我认为它是张量类型 这样对吗 我想知道如何
  • 错误代码:1222。使用的 SELECT 语句具有不同的列数

    我尝试了一些语句 包括连接 但无法将其他三个 MySQL 表中的数据插入到一个表中 在我的最后一次尝试中 我收到此错误 错误代码 1222 使用的 SELECT 语句具有不同的列数 请参阅下面我输入的查询 我是编码新手 所以我对 MySQL
  • 在服务器中下载 YouTube 视频

    我创建了一个 YouTube 搜索引擎 下载 MP3 转换脚本 我用过Jeckman 的 YouTube 下载器 https github com jeckman YouTube Downloader blob master getvide
  • Pandas 如何过滤一个系列

    在执行 groupby name 并在其他列上使用 Mean 函数后 我有一个这样的系列 name 383 3 000000 663 1 000000 726 1 000000 737 9 000000 833 8 166667 谁能告诉我
  • 具有不同形状的 Tensorflow 数据集

    我使用卷积网络对不同形状的图像进行分类 我找不到在 Tensorflow 中加载图像的方法 基于这个问题 https github com tensorflow tensorflow issues 2354它应该与 tf data Data
  • 根据对象类型将视图注入 ItemsControl

    我有一项服务返回 Party 类型的数组 政党有两个子类型 个人和组织 我在 WPF 应用程序 Prism MVVM 中从视图模型使用此服务 在此视图模型的构造函数中 我填充了 Party 类型的可观察集合 public PhoneBook
  • python 多线程连接超时

    看起来 如果你有一个n个线程的循环 并将它们与超时t逐一连接 那么你实际花费的时间是n t 因为开始计算一个子线程的超时时间是最后一个子线程的结束时间 有什么办法可以将总时间减少到 t 而不是 n t 吗 是的 您可以计算绝对超时 并在每次
  • 跟踪集合的旧部分和新部分

    我正在使用backbone js 并且我有一个包含 dos 的集合fetch 有时 我不想通过该选项 add true 由于我的子视图的创建方式 集合被循环 每个项目都是附加到当前表的新行 我尝试的一件事就是清空整个表并创建所有新行 但这太