如何在Dukescript中定义可写的可计算观察值?

时间:2018-11-24 13:11:19

标签: knockout.js dukescript

我正在尝试在Dukescript上复制the example 1,该示例包含修改生成的全名并自动修改数据模型上的姓氏字段。

到目前为止,这是我的代码

HTML:

<div>First name: <span data-bind="text: firstName, valueUpdate: input"></span></div>
<div>Last name: <span data-bind="text: lastName, valueUpdate: input"></span></div>
<div class="heading">Hello, <input data-bind="textInput: fullName, valueUpdate: afterkeydown,event: { keyup: fullName() }
"/></div>

Java:

package org.javapro.dukescript;

import net.java.html.json.Model;
import net.java.html.json.ComputedProperty;
import net.java.html.json.Property;
import net.java.html.json.Function;
import java.util.regex.Pattern;


@Model (targetId="",className = "WritableComputed", properties = {
    @Property (name = "firstName", type=String.class)
   ,@Property (name = "lastName", type=String.class)
})
class MyClass {

  @ComputedProperty static String fullName(String firstName, String lastName) {
    return firstName + " " + lastName;
  }

  @Function
  static void fullName(WritableComputed model, String value) {
    int lastSpacePos = value.lastIndexOf(" ");
            // Ignore values with no space character
            if (lastSpacePos > 0) {
              // Update "firstName"
                model.setFirstName(value.substring(0, lastSpacePos)); 
              // Update "lastName"
                model.setLastName(value.substring(lastSpacePos + 1)); 
            }
  }

  public static void main(String args[]){
    WritableComputed wc = new WritableComputed("hello","world");
    wc.applyBindings();
  }
}

问题在于文本字段仅呈现js函数

  

function(c,k){var e = b.ko4j; e && d.java_lang_Class(!1).toJS(d.org_netbeans_html_ko4j_ $ JsCallbacks $(!1)._ VM()。org_1netbeans_1html_1ko_4j_1 a,c,k))}

谢谢。

1 个答案:

答案 0 :(得分:0)

事实证明,即使默认情况下所计算的属性为只读,您也可以通过在注释<?php if (isset($_POST['cartbtn'])) { echo "hello"; } ?> 上指定一个接收数据模型< / strong>作为参数以及将用于变异的数据。

HTML:

@ComputedProperty

Java:

<div>First name: <span data-bind="text: firstName, valueUpdate: input"></span></div>
<div>Last name: <span data-bind="text: lastName, valueUpdate: input"></span></div>
<div class="heading">Hello, <input data-bind="textInput: fullName"/></div>