繁体   English   中英

AngularJS将对象缓存设置为脏

[英]AngularJS setting an object cache as dirty

我将AngularJS 1.2.x用于xeditable来编辑项目并更新数据库。 我的后端是Rails 3.2。

我有一个具有多个版本的关卡对象,每个版本都有一个from_date和cost_cents字段,在其中我可以设置xeditable来进行内联编辑。 问题是编辑这些内容后,如果刷新屏幕,则会显示旧值。 但是,如果禁用浏览器中的缓存,则会得到正确的值。 因此,我需要一种将父对象的缓存标记为脏的方法。

这是在级别字段的日期字段上使用xeditable的示例。

        <td editable-text="version.from_date"
            onbeforesave="update_version(level.id, version.id, $data, version.cost_cents)"
            class='date'>{{version.from_date}}</td>

是否有可能使AngularJS或angular-xeditable将父对象的缓存标记为脏,以便从数据库中重新加载值?

更新:改用表格

我用表单替换了xeditable,但仍然遇到了与缓存相同的问题。 仅在登台和生产服务器上,这不会在我的开发服务器上发生。

    <form ng-submit="update_version(level.id, version.id, version.from_date, version.cost_cents)">
        Date: <input type='text' id="from_date" name="version.from_date" ng-model="version.from_date" />
        Cost: <input type='text' id="cost_cents" name="version.cost_cents"
                     ng-model="version.cost_cents"
                     form-cents-to-dollars />

        <button id="update_btn" type="submit" class="confirm_btn">
            <i class="fa fa-pencil"></i> Update Version
        </button>
        <td><a id="edit" href="/api#/levels/{{level.id}}/edit_version/{{version.id}}">Edit</a></td>
        <td><a id="delete" href="" ng-confirm-click="delete_version(version.id)">
            <i class="fa fa-trash-o fa-lg" /></a></td>
    </form>

更新:删除cookie

如果我将登台服务器加载到firefox中并进行相同的测试,则删除当前会话的cookie,并刷新我的版本,列出它现在具有从数据库显示的正确数据。

更新:回复304未修改

我得到的响应是http 304:未修改,实际上我确实修改了数据,但是由于它是子对象,AngularJS尚未选择它。

更新:想法

我开始认为可能是Rails正在执行缓存?

通过在开发中将此标志切换为true,我现在可以在开发模式下复制相同的问题。 这样可以节省很多时间。

  config.action_controller.perform_caching = true

更新:Hacky解决方法

如果我在AngularJS的末尾标记http,则调用一个随机数,则它不会调用缓存,并且每次都能正常工作。 不过,这有点hacky,我希望有一种更好的方法。

$http({method: 'GET', url: "/levels/#{$stateParams['id']}?rnd="+new Date().getTime(), cache: false}).
  success( (data, status, headers, config) ->
    $scope.level = data
  )

将此行放在我不想缓存的控制器中;

headers['Last-Modified'] = Time.now.httpdate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM