运行时能否动态递增/修改SafeHtmlTemplates接口传入的变量值?
运行时修改传入GWT模板接口的参数值?没问题,但要搞清楚传递逻辑
嘿,咱们先把核心逻辑说清楚:当你把变量(比如你例子里的i)传入GWT的SafeHtmlTemplates接口方法时,参数是按值传递的——简单说就是模板方法拿到的是变量的一个“副本”,你没法在模板内部直接修改原始变量的值。不过!你完全可以在调用模板的代码逻辑里自己对变量做递增、修改这类操作,这完全不受限制。
结合你的代码例子来具体说明:
你的原始模板定义和调用代码是这样的:
public interface MyTemplate extends SafeHtmlTemplates { @Template("<div id=\"{0}\"></div>") SafeHtml temp(Integer id); } // 调用逻辑 MyTemplate tpls = GWT.create(MyTemplate.class); for (int i = 0; i < 2; i++) { tpls.temp(i); }
如果想要实现参数的递增或修改,你可以这么做:
方式一:在调用前后手动操作变量
如果你希望每次调用后变量自身递增(或者做其他修改),可以把循环改成更灵活的写法,比如:MyTemplate tpls = GWT.create(MyTemplate.class); int i = 0; while (i < 2) { // 先用当前i的值生成模板 SafeHtml html = tpls.temp(i); // 这里可以把html加到DOM里之类的操作 // 手动对变量进行递增(或者任何你需要的修改) i++; // 甚至可以改成 i += 3; 这类自定义修改 }方式二:调用时直接计算参数值
如果你不想改动原始循环变量,也可以在传入参数时直接计算出修改后的值:MyTemplate tpls = GWT.create(MyTemplate.class); for (int i = 0; i < 2; i++) { // 传入i+1作为id参数,原始i的值不会被改变 SafeHtml html = tpls.temp(i + 1); }
需要特别注意的是:你没办法在模板方法内部修改原始变量。模板本身只是做字符串替换的逻辑,它拿到的是参数的当前值,就算能修改(实际上也做不到),也只是修改副本,不会影响你代码里的原始变量。
说白了就是:模板管的是把你给的值替换到模板字符串里,而变量的修改操作,完全由你自己的业务代码来控制~
内容的提问来源于stack exchange,提问作者CrazySabbath
相关产品推荐
相关产品推荐

