使用knockout js访问金字塔视图

2024-05-17 07:16:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在金字塔中有这个delete视图,我使用的是mako模板和knockout js。你知道吗

config.add_route('delete', '/delete/{id}')

这是我到金字塔中delete视图的路径。我想将模板中的一些按钮绑定到此url,以便它调用delete视图。你知道吗

我试过这样做:

<script>
this.delete = function(detail){

  $.post(
      "${request.route_url('delete', id=detail['id'])}",
      {'action' : 'delete', 'id' : detail.id()},
      function(response){

          //remove the currently selected detail from the array
          self.details.remove(detail);
      }
  );
};

但是,这将返回以下回溯:

TypeError: 'Undefined' object has no attribute '__getitem__'
  1. 正确的方法是什么?你知道吗
  2. delete视图已将location设置为当前页。那么有没有一种不刷新当前页面的方法呢?你知道吗

Tags: the方法视图模板idconfigurlmako
2条回答

好吧,我知道答案了。我给未来的谷歌用户加上这个。你知道吗

值必须在敲除模型中作为ko.observable('<some_value>')进行观察,以便在不刷新的情况下进行更新。你知道吗

链接应该是delete/<some_id>。因此,将json对象中的字符串"delete/"id连接为:

var delete_link = "delete/".concat(detail.id);

然后使用delete函数,如下所示:

this.delete = function(detail){
   var delete_link = "delete/".concat(detail.id);
   $.post(
      delete_link,
      {'action' : 'delete', 'id' : detail['id']},
      function(response){
          self.details.remove(detail);
          }   
       );
};

${request.route_url('delete', id=detail['id'])}是python/mako代码,不是javascript代码。如果您的ID是99,那么它最终应该以delete/99的形式呈现给html。你知道吗

在python中出现TypeError是因为在名为detail的模板命名空间中没有对象/变量。也许这是因为当你把参数传递给mako的时候,你把它叫做record或者别的什么?你没有提供足够的信息让我告诉你。。。你知道吗

如果传入mako detail={id:99},那么${request.route_url('delete', id=detail['id'])}就可以了。如果细节是一个对象,那么detail.id更合适。你知道吗

不过,更进一步说,您最好像这样在mako中定义一个javascript对象(假设我已经将一个对象作为变量'mako_object'传递给了mako)

var my_object = {
    id: ${mako_object.id},
    delete_url: "${request.route_url('delete', id=mako_object.id)}",
}

因此html看起来像

var my_object = {
    id: 99,
    delete_url: "/delete/99",
}

相关问题 更多 >