2014-11-14 67 views
0

如何修改responseText: self.registrationmark以便self.registrationmark的值可以计算为变量而不是字符串?将observable的值作为变量而不是字符串进行评估

例如如果self.registrationmarkDE63BEY然后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()); 
+0

不要忘记接受答案 – 2014-11-16 01:02:09

回答

2

刚刚读您的评论以上马修,我觉得你首先需要设置的变量此范围/自:

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

那你肯定是后:

responseText: self[self.registrationmark()] 

即致电

self.registrationmark() 

得到像“DE63BEY”的字符串,然后得到相应的变量,你需要看看它的自我中,因为如果y OU在做:

self["DE63BEY"] 

这当然是相当于到

self.DE63BEY 

这是你后的变量!

0

尝试以下操作:

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

谢谢马修。我不认为我的问题很清楚,所以我详细阐述了它 – user1405195 2014-11-14 23:56:07

1

正如@sifriday所描述的,您可以将您的“变量”定义为对象的属性,可以按名称查找。它们不一定必须在self中定义。它可以是一个单独的对象:

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

然后

responseText: responses[self.registrationmark()] 

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

responseText: eval(self.registrationmark())