【问题标题】:jsp code not executing in backbone.js viewjsp代码未在backbone.js视图中执行
【发布时间】:2012-10-02 04:06:26
【问题描述】:

我正在尝试从我的主干视图执行 jsp 代码。 我从我的 Html 调用服务器端 api,如下所示

index.jsp(sample.js包含在这个jsp中)

%@ page contentType="text/html;charset=UTF-8"
         import="foo.*,java.util.List"

%>
<%

            Foo foo = new Foo();
            List<XYZ> xyzList = foo.getList();

%>

我正在使用主干框架。我的js代码如下。

sample.js

SampleView = Backbone.ModalView.extend(
        {
        name: "SampleView",
        model: SomeModel,
        templateHtml : "<div ><span>Search </span>" +
                "<table border='1'>"+
                "<thead>"+
                "<tr>"+
                        "<td></td>"+
                        "<th>header1</th>"+
                        "<th>header2</th>"+
                        "<th>header3</th>"+
                "</tr>"+
                "</thead>"+
                "<tr>"+
                     "<% for(XYZ xyz: xyslist ){   %>"+
                     "<td><input type='checkbox' value='<%= xyz.getName()%>'></td>"+
                     "<td name='selected'><%= xyz.getName()%></td>"+
                     "<td></td>"+
                     "<td></td>"+
                    "<% } %>"+
                "</tr>"+
                "<tr>"+
                "<td><input type='checkbox' value='test'></td>"+
                     "<td name='selected'>test</td>"+
                     "<td></td>"+
                     "<td></td></tr>"+
                "</table><button id='select'>Select</button></div>",


                initialize: function(){
                _.bindAll( this, "render");
                                this.template = _.template( this.templateHtml);
                        },
        events: {
                "click #select": "select"
                        },
                select: function(){
                         //implementation

                },        
        render: function(){
                                $(this.el).html( this.template());
                return this;
            }
    });

问题是,它不执行jsp代码。它仅显示硬编码的“测试”复选框,不会从服务器端检索列表。如果我在这里遗漏了什么,你能告诉我吗?谢谢。

【问题讨论】:

    标签: javascript jquery jsp backbone.js backbone-views


    【解决方案1】:

    JSP 中使用的 标记也被下划线模板引擎使用。当您没有任何变量要提供时,为什么要在视图中使用模板?

    当尝试运行您的代码时,下划线模板引擎给了我一个“意外标识符”,因为 不包含有效的 JavaScript 代码供它处理。

    代替

    $(this.el).html( this.template());
    

    你应该直接插入 HTML 字符串,像这样

    $(this.el).html(this.templateHtml);
    

    【讨论】:

    • 您好维尔纳,感谢您的回复。我根据您的建议更改了代码。但我仍然得到相同的结果。它不执行 JSP 代码。
    • 您能提供用于实例化视图的 JSP 吗?
    • 这个 SampleView 是一个从另一个视图调用的模态对话框。
    • var model = new DataNames(); var view = new SearchDataView({ model:model }); view.render().showModal({ x: event.pageX, y: event.pageY });
    • 问题是你的视图模板中的JSP代码永远不会在服务器上执行。当你访问一个 JSP 页面时,页面中的 java 代码在服务器上执行。当您的 SampleView 呈现时,它发生在客户端上,并且它的 html 被注入到一个 DOM 元素中。服务器从不涉及。
    【解决方案2】:

    您已经使用 Underscore.js 更改了 _.templateSettings

    例如 {{ your_variable }} 和其他

    _.templateSettings = {
        interpolate: /\{\{(.+?)\}\}/gim,
        evaluate: /\{\{(.+?)\}\}/gim,
        escape: /\{\{\-(.+?)\}\}/gim
    };
    
    var Auto =  Backbone.Model.extend     defaults: {
            color : 'red',
            name  : 'ferrari',
            year  : 2008
        }
    });
    
    var AutoView = Backbone.View.extend({
        tagName : 'li',
    
        template: _.template('<strong>'
            +'{{ year }}</strong>{{ name }}'),
    
        initialize : function(){
            this.render();
        },
    
        render : function(){    
            this.$el.html( this.template( this.model.toJSON() ) );
        }
    });
    
    var auto = new Auto();
    var autoView = new AutoView({model:auto});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多