![范围开发/如何在 perform_action 中更改范围结果](https://linux22.com/image/1125826/%E8%8C%83%E5%9B%B4%E5%BC%80%E5%8F%91%2F%E5%A6%82%E4%BD%95%E5%9C%A8%20perform_action%20%E4%B8%AD%E6%9B%B4%E6%94%B9%E8%8C%83%E5%9B%B4%E7%BB%93%E6%9E%9C.png)
我有点搞不懂如何在Scope::perform_action
方法或对象方法中 设置结果属性或触发范围搜索(刷新) ActivationQuery
。这个想法是更改源中的数据,然后通过新查询刷新回复,或者只是以与源更改相同的方式修改先前的结果。典型的例子是设置“已读”状态。
您能通过下面的例子提供一点帮助吗?
sc::ActivationQueryBase::UPtr Scope::perform_action(const sc::Result &result,
sc::ActionMetadata const &metadata,
std::string const &widget_id, std::string const &action_id) {
//update current Result/reply or trigger new search by scope
return sc::ActivationQueryBase::UPtr(new ActivationQuery(result, metadata, widget_id, action_id, config_));
}
答案1
您无法更改结果本身,它仅用于读取,您需要将任何更新应用于后端数据,然后重新执行搜索。为此,请在 ActivationQuery 类中重新实现 ActivationQueryBase 的 activate() 方法;在 activate() 中执行更新后端数据所需的任何操作,然后返回使用此 ctor 创建的 ActivationResponse 实例:
激活响应(CannedQuery const&查询);
查询参数应该指向你的范围。
当点击预览中的按钮时重新执行搜索的另一种方法是将按钮的 uri 属性设置为 CannedQuery::to_uri() 的值,但在这种情况下不会执行激活处理程序。
请注意,使用第一种方法,您可能会遇到https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1335761
我希望这能有所帮助。