将observable的值评估为变量而不是字符串

时间:2014-11-14 23:18:28

标签: javascript jquery knockout.js

如何修改responseText: self.registrationmark以使self.registrationmark的值评估为变量而不是字符串?

e.g。如果self.registrationmark的值为DE63BEY,则responseText:应评估为变量DE63BEY

HTML

<input type="text" id="registrationmark" data-bind="value: registrationmark">

的Javascript

function ViewModel() {
    var self = this;

    self.registrationmark = ko.observable();

    var DE63BEY = { ... }
    var SL64KWX = { ... }
    var CU56OHG = { ... }
    var VN10YMY = { ... }   
    var Y926MNB = { ... }

    $.mockjax({
        url: '/test',
        dataType: 'json',
        responseTime: 2500,
        responseText: self.registrationmark
    });

    ...

}

ko.applyBindings(new ViewModel());

3 个答案:

答案 0 :(得分:2)

刚刚在上面阅读了您对Matthew的评论,我认为您首先需要将变量的范围设置为此/ self:

self.DE63BEY = { ... }
self.SL64KWX = { ... }
self.CU56OHG = { ... }
self.VN10YMY = { ... }   
self.Y926MNB = { ... }

然后你必须追求:

responseText: self[self.registrationmark()]

即,致电

self.registrationmark()

获取类似“DE63BEY”的字符串然后获取相应的变量,你需要在self中查找它,就好像你在做:

self["DE63BEY"]

当然等同于

self.DE63BEY

这是你要追求的变量!

答案 1 :(得分:1)

正如@sifriday所描述的,你可以定义你的&#34;变量&#34;作为对象的属性,可以通过名称查找。它们不一定必须在self中定义。它可以是一个单独的对象:

var responses = {
    DE63BEY: { ... },
    SL64KWX: { ... },
    CU56OHG: { ... },
    VN10YMY: { ... },
    Y926MNB: { ... }
};

然后

responseText: responses[self.registrationmark()]

如果由于某种原因,您需要将值定义为变量,则可以使用eval动态读取它们的值。 此方法可能不安全,不应使用。

responseText: eval(self.registrationmark())

答案 2 :(得分:0)

尝试以下方法:

$.mockjax({
    url: '/test',
    dataType: 'json',
    responseTime: 2500,
    responseText: ko.unwrap(self.registrationmark)
});