我有一个包含行的表。 每次单击一行时,viewmodel都会使用订阅者将其通知给其他视图模型。
与此同时,每行都有图标。每当我点击一个图标时,我都会在我的一个视图模型中绑定一个函数click
。
现在,当我尝试从data
绑定函数中的行中获取任何值时,会出现问题。
订阅似乎比点击功能晚了。因此,当我点击该功能时,我无法从该行访问数据。
我通过直接在click函数中填充行row
来解决它。但是我希望能够从行外部访问click函数,比如说,在我的DOM中的固定元素或绝对元素中,因此我无法传递click
数据来自它的self.sendDataAndClick = function(data){
self.setData(data);
self.showAddModal();
};
//gets the info from the orders vm
shouter.subscribe(function(data) {
self.setData(data);
}, this, "selectedOrder");
//sets the data for the viewmodel
self.setData = function(data){
self.equipmentNumber(data.equipment_id());
self.leg(data);
self.setSeals(data);
}
绑定。这就是为什么我使用订阅者在行选择中被解雇的原因。
我的问题是。我们如何知道订户什么时候被解雇? 有没有办法改变顺序?
#include "stdio.h"
#include "time.h"
#include "string.h"
#include "cJSON.h"
#include "stdlib.h"
int checkUserRole(char *cmd);
int main(){
char *cmd = "zwr ^A(\"A\")"; //string: zwr ^A("A")
int v = checkUserRole(cmd);
printf("%d",v);
return 0;
}
int checkUserRole(char *cmd)
{
const char *u ;
u = getenv("USER");
char *token;
char *cmd_w_g;
char *limiter ;
if(strstr(cmd,"(") != NULL){
limiter = "(";
token = strtok(cmd,limiter);
cmd_w_g = token;
}
char *cmd_qualifier;
limiter = " ^";
cmd_qualifier = strtok(cmd_w_g,limiter);
char *cmd_q;
cmd_q = cmd_qualifier;
char *gbl ;
gbl = strtok(NULL,limiter);
char *fileName = "roles.cfg";
char buff[512];
FILE *file = fopen(fileName, "rt");
char fileContent[1000000];
while(fgets(buff, sizeof buff, file) != NULL){
sprintf(fileContent,"%s%s",fileContent,buff);
}
cJSON *root = cJSON_Parse(fileContent);
cJSON *gbl_json = cJSON_GetObjectItem(root,gbl);
cJSON *user_json = cJSON_GetObjectItem(gbl_json,u);
cJSON *cmd_json = cJSON_GetObjectItem(user_json,cmd_q);
char *role = cmd_json->valuestring;
if(strstr(role,"true") != NULL){
return 1;
} else {
return 0;
}
}
答案 0 :(得分:0)
好的,这就是我的理由。它可能无法完全回答您的问题,但它演示了如何控制订阅的执行顺序。
ko.extenders.queueSubs = function(target, value) {
var sQueue = []; // subscription queue
// set up a normal subscription and execute the queue subscriptions in order.
target.subscribe(function(newValue) {
sQueue.forEach(function(item, i) {
sQueue[i](newValue);
});
});
// overwrite the subscribe function of this observable into
// a function that adds the subscription at a position in the queue
target.subscribe = function(pos, fn) {
sQueue.splice(pos, 0, fn);
};
};
// use: ko.observable().extend({ queueSubs: true });
// queue a sub: ko.observable().subscribe(0, function(value) { alert(value); });